>

实现的云应用开发工具sbf282.com,库并执行下面查

- 编辑:澳门博发娱乐官网 -

实现的云应用开发工具sbf282.com,库并执行下面查

这篇文篇将介绍,如何通过SpringBoot整合Druid数据库链接池,实时监控数据库链接信息,为优化数据库性能提供更好的指导,同样将通过YML配置文件形式进行配置,方便简洁。

这篇文章主要介绍,通过Spring Boot整合Mybatis后如何实现在一个工程中实现多数据源。同时可实现读写分离。

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

你是否因为项目出现问题,查找日志文件定位错误花费N多时间,是否为此苦不堪言,没关系!现在通过这篇文章,将彻底解决你的烦恼,这篇文篇介绍,如何通过logback配置文件将日志进行分级打印,一个配置文件彻底搞定日志查找得烦恼。

环境:

环境:

Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud ConfigSpring Cloud NetflixSpring Cloud CloudFoundrySpring Cloud AWSSpring Cloud SecuritySpring Cloud CommonsSpring Cloud ZookeeperSpring Cloud CLI等项目。

Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud ConfigSpring Cloud NetflixSpring Cloud CloudFoundrySpring Cloud AWSSpring Cloud SecuritySpring Cloud CommonsSpring Cloud ZookeeperSpring Cloud CLI等项目。

环境:

windowsjdk 8maven 3.0IDEA

-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `sno` int NOT NULL, `sname` varchar DEFAULT NULL, `sex` char DEFAULT NULL, `dept` varchar DEFAULT NULL, `birth` date DEFAULT NULL, `age` int DEFAULT NULL, PRIMARY KEY  ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of student-- ----------------------------INSERT INTO `student` VALUES ('1', '李同学', '1', '王同学学习成绩很不错', '2010-07-22', '17');

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-boot-study</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-boot-druid</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-druid</name> <description>this project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- 版本控制 --> <commons-lang3.version>3.4</commons-lang3.version> <commons-codec.version>1.10</commons-codec.version> <mybatis-spring-boot.version>1.2.0</mybatis-spring-boot.version> <lombok.version>1.16.14</lombok.version> <fastjson.version>1.2.41</fastjson.version> <druid.version>1.1.2</druid.version> </properties> <repositories> <!-- 阿里私服 --> <repository> <id>aliyunmaven</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> </repositories> <dependencies> <!-- mybatis核心包 start --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot.version}</version> </dependency> <!-- mybatis核心包 end --> <!-- SpringWEB核心包 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringWEB核心包 end --> <!-- mysql驱动核心包 start --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- mysql驱动核心包 end --> <!-- sprigTest核心包 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- sprigTest核心包 end --> <!-- commons工具核心包 start --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> <!-- commons工具核心包 end --> <!-- fastjson核心包 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <!-- fastjson核心包 end --> <!-- druid核心包 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- druid核心包 end --> <!-- lombok核心包 start --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <!-- lombok核心包 end --> </dependencies> <build> <finalName>spring-boot-druid</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.4.RELEASE</version> </dependency> </dependencies> <configuration> <mainClass>cn.zhangbox.admin.SpringBootDruidApplication</mainClass> <jvmArguments>-Dfile.encoding=UTF-8 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 </jvmArguments> <executable>true</executable> <fork>true</fork> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>cn.zhangbox.admin.SpringBootDruidApplication</mainClass> <jvmArguments>-Dfile.encoding=UTF-8 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments> <executable>true</executable> <fork>true</fork> </configuration> </plugin> </plugins> </build></project>
windowsjdk 8maven 3.0IDEA

“微服务架构”在这几年非常的火热,以至于关于微服务架构相关的开源产品被反复的提及(比如: netflixdubbo),Spring Cloud也因Spring社区的强大知名度和影响力也被广大架构师与开发者备受关注。

“微服务架构”在这几年非常的火热,以至于关于微服务架构相关的开源产品被反复的提及(比如: netflixdubbo),Spring Cloud也因Spring社区的强大知名度和影响力也被广大架构师与开发者备受关注。

windowsjdk 8maven 3.0IDEA

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-boot-study</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-boot-log</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-logging</name> <description>Demo project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>

#选择哪一个环境的配置#这里可以在每个环境配置redis,数据库,消息等相关的组件的配置spring: profiles: active: dev#文档块区分为三个------server: port: 8081spring: profiles: dev#日志logging:#日志配置文件位置 config: classpath:log/logback.xml#日志打印位置,这里是默认在项目根路径下 path: log/spring-boot-log#文档块区分为三个------server: port: 8082spring: profiles: test#日志logging:#日志配置文件位置 config: classpath:log/logback.xml#日志打印位置,这里是默认在项目根路径下 path: usr/spring-boot/log/spring-boot-log#文档块区分为三个------server: port: 8083spring: profiles: prod#日志logging:#日志配置文件位置 config: classpath:log/logback.xml#日志打印位置,这里是默认在项目根路径下 path: usr/spring-boot/log/spring-boot-log

注意:这里引入了lombok插件节省编写实体类时候写getset方法,这里在idea中进行setget操作需要下载lombok插件,在设置页面的plugins中搜索lombok插件在中央插件库下载后重启idea即可,更详细的lombok使用教程可以查考:

mysql中创建student库并执行下面查询创建student

那么什么是“微服务架构”呢?简单的说,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。

那么什么是“微服务架构”呢?简单的说,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务,每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。

在工程resources文件夹下新建文件夹log,并在该文件夹下创建logback.xml文件,加入以下配置:

Lombok:让JAVA代码更优雅

-- ------------------------------ Table structure for student-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `sno` int NOT NULL, `sname` varchar DEFAULT NULL, `sex` char DEFAULT NULL, `dept` varchar DEFAULT NULL, `birth` date DEFAULT NULL, `age` int DEFAULT NULL, PRIMARY KEY  ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of student-- ----------------------------INSERT INTO `student` VALUES ('1', '李同学', '1', '王同学学习成绩很不错', '2010-07-22', '17');

对于“微服务架构”,大家在互联网可以搜索到很多相关的介绍和研究文章来进行学习和了解。也可以阅读始祖Martin Fowler的《Microservices》(中文版翻译点击查看),本文不做更多的介绍和描述。

对于“微服务架构”,大家在互联网可以搜索到很多相关的介绍和研究文章来进行学习和了解。也可以阅读始祖Martin Fowler的《Microservices》(中文版翻译点击查看),本文不做更多的介绍和描述。

<!-- Logback configuration. See http://logback.qos.ch/manual/index.html --><configuration scan="true" scanPeriod="10 seconds"> <!--继承spring boot提供的logback配置--> <!--<include resource="org/springframework/boot/logging/logback/base.xml" />--> <!--设置系统日志目录--> <property name="APP_DIR" value="spring-boot-log"/> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr{faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr{faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!-- 控制台输出 --> <appender name="CONSOLE" > <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> <filter > <level>debug</level> </filter> </appender> <!-- 时间滚动输出 level为 DEBUG 日志 --> <appender name="DEBUG_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_debug.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录debug级别的 --> <filter > <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 INFO 日志 --> <appender name="INFO_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_info.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录info级别的 --> <filter > <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 WARN 日志 --> <appender name="WARN_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_warn.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录warn级别的 --> <filter > <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 ERROR 日志 --> <appender name="ERROR_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_error.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录ERROR级别的 --> <filter > <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="org.springframework.web" level="info"/> <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> <logger name="cn.zhangbox.springboot" level="debug"/> <!--开发环境:打印控制台--> <springProfile name="dev"> <root level="info"> <appender-ref ref="CONSOLE"/> <appender-ref ref="DEBUG_FILE"/> <appender-ref ref="INFO_FILE"/> <appender-ref ref="WARN_FILE"/> <appender-ref ref="ERROR_FILE"/> </root> </springProfile> <!--测试环境:打印控制台和输出到文件--> <springProfile name="test"> <root level="info"> <appender-ref ref="CONSOLE"/> <appender-ref ref="INFO_FILE"/> <appender-ref ref="WARN_FILE"/> <appender-ref ref="ERROR_FILE"/> </root> </springProfile> <!--生产环境:输出到文件--> <springProfile name="prod"> <root level="error"> <appender-ref ref="CONSOLE"/> <appender-ref ref="DEBUG_FILE"/> <appender-ref ref="INFO_FILE"/> <appender-ref ref="ERROR_FILE"/> </root> </springProfile></configuration>
#公共配置server: port: 80 tomcat: uri-encoding: UTF-8spring: #激活哪一个环境的配置文件 profiles: active: dev #连接池配置 datasource: driver-class-name: com.mysql.jdbc.Driver # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource druid: # 配置测试查询语句 validationQuery: SELECT 1 FROM DUAL # 初始化大小,最小,最大 initialSize: 10 minIdle: 10 maxActive: 200 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 180000 testOnBorrow: false testWhileIdle: true removeAbandoned: true removeAbandonedTimeout: 1800 logAbandoned: true # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxOpenPreparedStatements: 100 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#mybatismybatis: # 实体类扫描 type-aliases-package: cn.zhangbox.springboot.entity # 配置映射文件位置 mapper-locations: classpath:mapper/*.xml # 开启驼峰匹配 mapUnderscoreToCamelCase: true---#开发环境配置server: #端口 port: 8080spring: profiles: dev # 数据源配置 datasource: url: jdbc:mysql://127.0.0.1:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456#日志logging: config: classpath:log/logback.xml path: log/spring-boot-druid---#测试环境配置server: #端口 port: 80spring: profiles: test # 数据源配置 datasource: url: jdbc:mysql://127.0.0.1:3306/spring-boot-druid?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456#日志logging: config: classpath:log/logback.xml path: /home/log/spring-boot-druid---#生产环境配置server: #端口 port: 8080spring: profiles: prod # 数据源配置 datasource: url: jdbc:mysql://127.0.0.1:3306/spring-boot-druid?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456#日志logging: config: classpath:log/logback.xml path: /home/log/spring-boot-druid

mysql中创建teacher库并执行下面查询创建teacher

在简单介绍了Spring Cloud和微服务架构之后,下面回归本文的主旨内容,如何使用Spring Cloud来实现服务治理。

在简单介绍了Spring Cloud和微服务架构之后,下面回归本文的主旨内容,如何使用Spring Cloud来实现服务治理。

注意loback配置文件中

这里进行了mybatis整合,如果不会mybatis整合可以参考我写的这篇文章:SpringBoot非官方教程 | 第六篇:SpringBoot整合mybatis

-- ------------------------------ Table structure for teacher-- ----------------------------DROP TABLE IF EXISTS `teacher`;CREATE TABLE `teacher` ( `Tno` varchar NOT NULL DEFAULT '', `Tname` varchar DEFAULT NULL, `sex` char DEFAULT NULL, `dept` varchar DEFAULT NULL, `birth` date DEFAULT NULL, `age` int DEFAULT NULL, PRIMARY KEY  ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of teacher-- ----------------------------INSERT INTO `teacher` VALUES ('1', '王老师', '1', '王老师上课很认真', '2018-07-06', '35');

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-boot-study</artifactId> <version>1.0-SNAPSHOT</version> </parent> <groupId>cn.zhangbox</groupId> <artifactId>spring-boot-mybatis-datasource</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-mybatis-datasource</name> <description>this project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!-- 版本控制 --> <commons-lang3.version>3.4</commons-lang3.version> <commons-codec.version>1.10</commons-codec.version> <mybatis-spring-boot.version>1.2.0</mybatis-spring-boot.version> <lombok.version>1.16.14</lombok.version> <fastjson.version>1.2.41</fastjson.version> <druid.version>1.1.2</druid.version> </properties> <repositories> <!-- 阿里私服 --> <repository> <id>aliyunmaven</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> </repositories> <dependencies> <!-- mybatis核心包 start --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot.version}</version> </dependency> <!-- mybatis核心包 end --> <!-- SpringWEB核心包 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringWEB核心包 end --> <!-- mysql驱动核心包 start --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- mysql驱动核心包 end --> <!-- sprigTest核心包 start --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- sprigTest核心包 end --> <!-- commons工具核心包 start --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>${commons-codec.version}</version> </dependency> <!-- commons工具核心包 end --> <!-- fastjson核心包 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <!-- fastjson核心包 end --> <!-- druid核心包 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- druid核心包 end --> <!-- lombok核心包 start --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <!-- lombok核心包 end --> </dependencies> <build> <finalName>spring-boot-mybatis-datasource</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.4.RELEASE</version> </dependency> </dependencies> <configuration> <mainClass>cn.zhangbox.admin.SpringBootDruidApplication</mainClass> <jvmArguments>-Dfile.encoding=UTF-8 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 </jvmArguments> <executable>true</executable> <fork>true</fork> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>cn.zhangbox.admin.SpringBootDruidApplication</mainClass> <jvmArguments>-Dfile.encoding=UTF-8 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005</jvmArguments> <executable>true</executable> <fork>true</fork> </configuration> </plugin> </plugins> </build></project>

由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,比如:Netflix EurekaConsulZookeeper。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。

由于Spring Cloud为服务治理做了一层抽象接口,所以在Spring Cloud应用中可以支持多种不同的服务治理框架,比如:Netflix EurekaConsulZookeeper。在Spring Cloud服务治理抽象层的作用下,我们可以无缝地切换服务治理实现,并且不影响任何其他的服务注册、服务发现、服务调用等逻辑。

<logger name="cn.zhangbox.springboot" level="debug"/>

在工程resources文件夹下新建文件夹log,并在该文件夹下创建logback.xml文件,加入以下配置:

注意:这里引入了lombok插件节省编写实体类时候写getset方法,这里在idea中进行setget操作需要下载lombok插件,在设置页面的plugins中搜索lombok插件在中央插件库下载后重启idea即可,更详细的lombok使用教程可以查考:

所以,下面我们通过Eureka这种种服务治理的实现来体会Spring Cloud这一层抽象所带来的好处。下一篇介绍基于Consul的服务注册与调用。

所以,下面我们通过Eureka这种种服务治理的实现来体会Spring Cloud这一层抽象所带来的好处。下一篇介绍基于Consul的服务注册与调用。

name的属性值一定要是当前工程的java代码的完整目录,因为mybatis打印的日志级别是debug级别的,因此需要配置debug级别日志扫描的目录。

<!-- Logback configuration. See http://logback.qos.ch/manual/index.html --><configuration scan="true" scanPeriod="10 seconds"> <!--继承spring boot提供的logback配置--> <!--<include resource="org/springframework/boot/logging/logback/base.xml" />--> <!--设置系统日志目录--> <property name="APP_DIR" value="spring-boot-druid" /> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr{faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr{faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!-- 控制台输出 --> <appender name="CONSOLE" > <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> <filter > <level>info</level> </filter> </appender> <!-- 时间滚动输出 level为 DEBUG 日志 --> <appender name="DEBUG_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_debug.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录debug级别的 --> <filter > <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 INFO 日志 --> <appender name="INFO_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_info.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录info级别的 --> <filter > <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 WARN 日志 --> <appender name="WARN_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_warn.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录warn级别的 --> <filter > <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 ERROR 日志 --> <appender name="ERROR_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_error.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录ERROR级别的 --> <filter > <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="org.springframework.web" level="info"/> <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> <logger name="cn.zhangbox.springboot" level="debug"/> <!--开发环境:打印控制台--> <springProfile name="dev"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile> <!--测试环境:打印控制台和输出到文件--> <springProfile name="test"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile> <!--生产环境:输出到文件--> <springProfile name="prod"> <root level="info"> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile></configuration>

Lombok:让JAVA代码更优雅

首先,我们来尝试使用Spring Cloud Eureka来实现服务治理。

首先,我们来尝试使用Spring Cloud Consul来实现服务治理。

@SpringBootApplicationpublic class SpringBootConfigApplication { public static void main(String[] args) { SpringApplication.run(SpringBootConfigApplication.class, args); }}

 . ____ _ __ _ _ /\ / ___'_ __ _ __ __ __ _    \___ | '_ | '_| | '_ / _` |     \/ ___)| |_)| | | | | ||  ) ) ' |____| .__|_| |_|_| |___, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.3.RELEASE)2018-07-05 15:05:13.680 INFO 15060 --- [ main] c.z.s.SpringBootLoggingApplication : Starting SpringBootLoggingApplication on MS-20180428GSYE with PID 15060 (started by Administrator in D:开源项目spring-boot-study)2018-07-05 15:05:13.685 DEBUG 15060 --- [ main] c.z.s.SpringBootLoggingApplication : Running with Spring Boot v1.5.3.RELEASE, Spring v4.3.8.RELEASE2018-07-05 15:05:13.686 INFO 15060 --- [ main] c.z.s.SpringBootLoggingApplication : The following profiles are active: dev2018-07-05 15:05:13.766 INFO 15060 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@79d94571: startup date [Thu Jul 05 15:05:13 GMT+08:00 2018]; root of context hierarchy2018-07-05 15:05:14.223 INFO 15060 --- [kground-preinit] o.h.validator.internal.util.Version : HV000001: Hibernate Validator 5.3.5.Final2018-07-05 15:05:15.550 INFO 15060 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port: 8081 2018-07-05 15:05:15.563 INFO 15060 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat2018-07-05 15:05:15.565 INFO 15060 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.142018-07-05 15:05:15.703 INFO 15060 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2018-07-05 15:05:15.704 INFO 15060 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1938 ms2018-07-05 15:05:15.869 INFO 15060 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]2018-07-05 15:05:15.876 INFO 15060 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]2018-07-05 15:05:15.877 INFO 15060 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]2018-07-05 15:05:15.877 INFO 15060 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]2018-07-05 15:05:15.877 INFO 15060 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]2018-07-05 15:05:16.219 INFO 15060 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@79d94571: startup date [Thu Jul 05 15:05:13 GMT+08:00 2018]; root of context hierarchy2018-07-05 15:05:16.298 INFO 15060 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)2018-07-05 15:05:16.299 INFO 15060 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)2018-07-05 15:05:16.328 INFO 15060 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2018-07-05 15:05:16.328 INFO 15060 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2018-07-05 15:05:16.369 INFO 15060 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2018-07-05 15:05:16.616 INFO 15060 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup2018-07-05 15:05:16.636 INFO 15060 --- [ main] o.a.coyote.http11.Http11NioProtocol : Initializing ProtocolHandler ["http-nio-8081"]2018-07-05 15:05:16.645 INFO 15060 --- [ main] o.a.coyote.http11.Http11NioProtocol : Starting ProtocolHandler ["http-nio-8081"]2018-07-05 15:05:16.659 INFO 15060 --- [ main] o.a.tomcat.util.net.NioSelectorPool : Using a shared selector for servlet write/read2018-07-05 15:05:16.679 INFO 15060 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port: 8081 2018-07-05 15:05:16.685 INFO 15060 --- [ main] c.z.s.SpringBootLoggingApplication : Started SpringBootLoggingApplication in 4.291 seconds (JVM running for 5.767)

注意:loback配置文件中

#公共配置server: port: 80 tomcat: uri-encoding: UTF-8spring: #激活哪一个环境的配置文件 profiles: active: dev #连接池配置 datasource: #配置student库驱动和连接池 student: driver-class-name: com.mysql.jdbc.Driver # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource #配置teacher库驱动和连接池 teacher: driver-class-name: com.mysql.jdbc.Driver # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource druid: # 配置测试查询语句 validationQuery: SELECT 1 FROM DUAL # 初始化大小,最小,最大 initialSize: 10 minIdle: 10 maxActive: 200 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 180000 testOnBorrow: false testWhileIdle: true removeAbandoned: true removeAbandonedTimeout: 1800 logAbandoned: true # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxOpenPreparedStatements: 100 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#mybatismybatis: # 实体类扫描 type-aliases-package: cn.zhangbox.springboot.entity # 配置映射文件位置 mapper-locations: classpath:mapper/*.xml # 开启驼峰匹配 mapUnderscoreToCamelCase: true---#开发环境配置server: #端口 port: 8080spring: profiles: dev # 数据源配置 datasource: student: url: jdbc:mysql://127.0.0.1:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456 teacher: url: jdbc:mysql://127.0.0.1:3306/teacher?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456#日志logging: config: classpath:log/logback.xml path: log/spring-boot-mybatis-datasource---#测试环境配置server: #端口 port: 80spring: profiles: test # 数据源配置 datasource: student: url: jdbc:mysql://127.0.0.1:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456 teacher: url: jdbc:mysql://127.0.0.1:3306/teacher?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456#日志logging: config: classpath:log/logback.xml path: /home/log/spring-boot-mybatis-datasource---#生产环境配置server: #端口 port: 8080spring: profiles: prod # 数据源配置 datasource: student: url: jdbc:mysql://127.0.0.1:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456 teacher: url: jdbc:mysql://127.0.0.1:3306/teacher?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true username: root password: 123456#日志logging: config: classpath:log/logback.xml path: /home/log/spring-boot-mybatis-datasource

Spring Cloud EurekaSpring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。

Consul是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用Go 语言开发。

sbf282.com 1图片.png

<logger name="cn.zhangbox.springboot" level="debug"/>

这里进行了mybatis整合,如果不会mybatis整合可以参考我写的这篇文章:SpringBoot非官方教程 | 第六篇:SpringBoot整合mybatis

下面,就来具体看看如何使用Spring Cloud Eureka实现服务治理,这里使用eureka-server为服务注册中心工程、eureka-provider服务提供者工程、eureka-consumer服务消费者工程。

它具有很多优点。包括: 基于 raft协议,比较简洁; 支持健康检查, 同时支持 HTTPDNS 协议 支持跨数据中心的WAN 集群 提供图形界面 跨平台,支持 Linux、Mac、Windows

这里因为logback配置中将不同级别的日志设置了在不同文件中打印,这样很大程度上方便项目出问题查找问题。

name的属性值一定要是当前工程的java代码的完整目录,因为mybatis打印的日志级别是debug级别的,因此需要配置debug级别日志扫描的目录。

在工程resources文件夹下新建文件夹log,并在该文件夹下创建logback.xml文件,加入以下配置:

环境:

下面,就来具体看看如何使用Spring Cloud Consul实现服务治理,这里使用Consul为服务注册中心工程、consul-provider服务提供者工程、consul-consumer服务消费者工程。

Spring Boot日志组件logback实现日志分级打印源码

在工程java代码目录下创建config的目录在下面创建DruidDBConfig类加入以下代码:

<!-- Logback configuration. See http://logback.qos.ch/manual/index.html --><configuration scan="true" scanPeriod="10 seconds"> <!--继承spring boot提供的logback配置--> <!--<include resource="org/springframework/boot/logging/logback/base.xml" />--> <!--设置系统日志目录--> <property name="APP_DIR" value="spring-boot-mybatis-datasource" /> <!-- 彩色日志 --> <!-- 彩色日志依赖的渲染类 --> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <!-- 彩色日志格式 --> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr{faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr{faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <!-- 控制台输出 --> <appender name="CONSOLE" > <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> <filter > <level>info</level> </filter> </appender> <!-- 时间滚动输出 level为 DEBUG 日志 --> <appender name="DEBUG_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_debug.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录debug级别的 --> <filter > <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 INFO 日志 --> <appender name="INFO_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_info.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录info级别的 --> <filter > <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 WARN 日志 --> <appender name="WARN_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_warn.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录warn级别的 --> <filter > <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 时间滚动输出 level为 ERROR 日志 --> <appender name="ERROR_FILE" > <!-- 正在记录的日志文件的路径及文件名 --> <file>${LOG_PATH}/log_error.log</file> <!--日志文件输出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此处设置字符集 --> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy > <!-- 归档的日志文件的路径,例如今天是2017-04-26日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。 而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日志记录之外,还配置了日志文件不能超过500M,若超过500M,日志文件会以索引0开始, 命名日志文件,例如log-error-2017-04-26.0.log --> <timeBasedFileNamingAndTriggeringPolicy > <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>30</maxHistory> </rollingPolicy> <!-- 此日志文件只记录ERROR级别的 --> <filter > <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <logger name="org.springframework.web" level="info"/> <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/> <logger name="cn.zhangbox.springboot" level="debug"/> <!--开发环境:打印控制台--> <springProfile name="dev"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile> <!--测试环境:打印控制台和输出到文件--> <springProfile name="test"> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile> <!--生产环境:输出到文件--> <springProfile name="prod"> <root level="info"> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="ERROR_FILE" /> </root> </springProfile></configuration>
windowsjdk 8maven 3.0IDEA

环境:

欢迎关注喜欢、和点赞后续将推出更多的SpringBoot教程,敬请期待。欢迎关注我的微信公众号获取更多更全的学习资源,视频资料,技术干货!

@Configurationpublic class DruidDBConfig { @Bean public ServletRegistrationBean druidServlet() { ServletRegistrationBean reg = new ServletRegistrationBean(); reg.setServlet(new StatViewServlet; reg.addUrlMappings("/druid/*"); //设置控制台管理用户 reg.addInitParameter("loginUsername","root"); reg.addInitParameter("loginPassword","root"); // 禁用HTML页面上的“Reset All”功能 reg.addInitParameter("resetEnable","false"); //reg.addInitParameter("allow", "127.0.0.1"); //白名单 return reg; } @Bean public FilterRegistrationBean filterRegistrationBean() { //创建过滤器 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter; Map<String, String> initParams = new HashMap<String, String>(); //忽略过滤的形式 initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"); filterRegistrationBean.setInitParameters(initParams); //设置过滤器过滤路径 filterRegistrationBean.addUrlPatterns; return filterRegistrationBean; }}

注意:loback配置文件中

首先构建父工程,引入父工程依赖:

windowsjdk 8maven 3.0IDEA

sbf282.com 2欢迎扫码关注公众号回复“学习”,拉你进程序员技术讨论群干货资源第一时间分享。

本文由胜博发-编程发布,转载请注明来源:实现的云应用开发工具sbf282.com,库并执行下面查