大家好,我是烤鸭:
这是一篇关于springboot多环境加载yml和logback配置文件。
环境:
这是一篇关于springboot多环境加载yml和logback配置文件。
环境:
开发工具 idea(推荐)/eclipse(对yml支持不好)
jdk 1.8
springboot 1.5.6.RELEASE
1. yml和logback文件
1.1 结构,如图所示:
1.2 application.yml (默认加载的初始化文件)
#开发环境配置
spring:profiles:
# active: devactive: @profiles.active@
1.3 application-dev/test/pro.yml
logging:level:org.springframework.web: DEBUG,CONSOLEconfig: classpath:logback-dev.xml#查看springboot开启了哪些配置
debug: true#server:
# port: 8131 #配置程序端口,默认为8080
# session-timeout: 5000 #用户会话session过期时间,以秒为单位
# context-path: #配置访问路径,默认为/spring:datasource:name: devurl: jdbc:mysql://localhost:3306/jeesite?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=trueusername: rootpassword: root# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverfilters: statmaxActive: 20initialSize: 1maxWait: 60000minIdle: 1timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: select 'x'testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truemaxOpenPreparedStatements: 20mybatis:mapper-locations: classpath:com.test.test.mapper/*.xmltype-aliases-package: com.test.test.pojojedis :pool :host : localhostport : 9001password: adminconfig :maxTotal: 100maxIdle: 10maxWaitMillis : 100000
#pagehelper分页插件
pagehelper:helperDialect: mysqlreasonable: truesupportMethodsArguments: trueparams: count=countSql
thread:pool:corePoolSize: 10maxPoolSize: 15queueCapacity: 20
主要是集成了mysql,mybatis,redis,logback。配置了线程池参数。
1.4 logback-dev.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true"><!-- 项目名称 --><property name="PROJECT_NAME" value="bq_interface" /><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="LOG_HOME" value="/opt/logs/bq_interface" /><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!--<withJansi>true</withJansi>--><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)</pattern><charset>UTF-8</charset><!-- <charset>GBK</charset> --></encoder></appender><!-- 按照每天生成日志文件 --><appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 过滤器,只打印ERROR级别的日志 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.system-dev.%d{yyyy-MM-dd}.%i.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>15</MaxHistory><!--日志文件最大的大小--><MaxFileSize>10MB</MaxFileSize></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern><charset>UTF-8</charset></encoder></appender><logger name="system_error" additivity="true"><appender-ref ref="SYSTEM_FILE"/></logger><!-- 自己打印的日志文件,用于记录重要日志信息 --><!-- <appender name="MY_INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> --><!-- 过滤器,只打印ERROR级别的日志 --><!-- <filter class="ch.qos.logback.classic.filter.LevelFilter"> --><!-- <level>INFO</level> --><!-- <onMatch>ACCEPT</onMatch> --><!-- <onMismatch>DENY</onMismatch> --><!-- </filter> --><!-- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> --><!-- 日志文件输出的文件名 --><!-- <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}.my_info.%d{yyyy-MM-dd}.%i.log</FileNamePattern> --><!-- 日志文件保留天数 --><!-- <MaxHistory>15</MaxHistory> --><!-- 日志文件最大的大小 --><!-- <MaxFileSize>10MB</MaxFileSize> --><!-- </rollingPolicy> --><!-- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> --><!-- 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 --><!-- <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] %logger{50} - %msg%n</pattern> --><!-- <charset>UTF-8</charset> --><!-- </encoder> --><!-- </appender> --><!-- <logger name="my_info" additivity="true"> --><!-- <appender-ref ref="MY_INFO_FILE"/> --><!-- </logger> --><!-- 设置Spring&Hibernate日志输出级别 --><logger name="org.springframework" level="WARN" /><logger name="org.mybatis" level="WARN" /><logger name="com.ibatis" level="DEBUG" /><logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" /><logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" /><logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" /><logger name="java.sql.Connection" level="DEBUG" /><logger name="java.sql.Statement" level="DEBUG" /><logger name="java.sql.PreparedStatement" level="DEBUG" /><logger name="com.ruidou.baoqian.mapper" level="DEBUG" /><!-- 开发环境下的日志配置 --><root level="INFO,DEBUG"><appender-ref ref="CONSOLE" /><appender-ref ref="SYSTEM_FILE" /></root>
</configuration>
2. pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"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>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version></parent><groupId>com.test.test</groupId><version>1.0.0-SNAPSHOT</version><artifactId>test_interface</artifactId><packaging>war</packaging><name>test_interface</name><description>test项目</description><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.encoding>UTF-8</maven.compiler.encoding><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.build.locales>zh_CN</project.build.locales></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-asl</artifactId><version>1.9.13</version></dependency><!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.2</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.20</version><scope>provided</scope></dependency><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.0</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.45</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.4</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.35</version></dependency><!-- Testing Dependencies --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>provided</scope></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version></dependency><!-- alibaba的druid数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.11</version></dependency><!-- 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.1.2</version></dependency><!-- alibaba的druid数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.0</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.10</version></dependency></dependencies><profiles><profile><!--本地开发环境--><id>dev</id><properties><profiles.active>dev</profiles.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><!--测试环境--><id>test</id><properties><profiles.active>test</profiles.active></properties></profile><profile><!--生产环境--><id>pro</id><properties><profiles.active>pro</profiles.active></properties></profile></profiles><build><finalName>myTest</finalName> <!-- 指定package生成的文件名为my-spring-boot.jar --><filters><filter>src/main/resources/application-${profiles.active}.yml</filter><filter>src/main/resources/logback-${profiles.active}.xml</filter></filters>
<!-- 替换${key}内容 --><resources><resource><filtering>true</filtering>
<!-- 要到达最底层目录 --><directory>src/main/resources/</directory></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><addClasspath>true</addClasspath><useUniqueVersions>false</useUniqueVersions><classpathPrefix>lib/</classpathPrefix><mainClass>com.test.test.TestMainApplication</mainClass></manifest><manifestEntries><version>${project.version}</version></manifestEntries></archive></configuration></plugin></plugins></build>
</project>
中间有很多jar包不需要的,自己删掉吧。
3. main方法
3.1 TestMainApplication:
/*** @author Binary Wang(https://githpaub.com/binarywang)*/
@SpringBootApplication
public class TestMainApplication {public static void main(String[] args) {SpringApplication.run(RootConfiguration.class, args);}
}
3.2 RootConfiguration:
package com.test.test.config;import com.test.test.constants.IDBConstant;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;import javax.annotation.PostConstruct;
import java.util.concurrent.Executors;@Configuration
@EnableAutoConfiguration
@SpringBootApplication
@ComponentScan(value = "com.test.test", excludeFilters = { @Filter(Controller.class),@Filter(type = FilterType.ASSIGNABLE_TYPE, value = { RootConfiguration.class }) })
@MapperScan({"com.test.test.dao"})
public class RootConfiguration extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {//配置tomcat启动端口号@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {container.setPort(8131);container.setSessionTimeout(30);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(RootConfiguration.class);}@PostConstructpublic void postConstruct() {IDBConstant.threadPool = Executors.newFixedThreadPool(20);}}
4. maven打包
clean package -Ptest -U
这样生成的war包就加载指定的yml和logback文件了。-Ptest指的是加载profiles.active=test的配置文件。
之前一直想打成jar包启动
nohup java -jar ./myTest-1.0-SNAPSHOT.jar -profiles.active=pro &
无奈还是无法加载指定的配置文件。
没办法就打成了war包放到tomcat下了。
5. jenkins/hudson 打包脚本
cd /opt/source/test_interface
rm -rf ./*
cp -rf /root/.hudson/jobs/test_interface/workspace/target/myTest.war ./
kill -9 `ps aux | grep myTest| grep -v grep | awk '{print $2}'`
unzip -o myTest.war
cd /opt/tomcat/tomcat_test_interface/bin/
chmod +x *.sh
sh ./startup.sh