- 多配置文件
- 项目开发时,为了方便,一般会配置多个配置文件,在不同的环境下使用,一般会有开发、测试、生产三个配置文件,打成jar包时,指定要使用的配置文件就可以在指定环境中运行相应的jar包,这样避免修改代码带来的麻烦.
- 上图中,application-dev.properties、application-prod.properties、application-test.properties分别对应的是开发、生产、测试时的配置文件,在application.properties中通过配置spring.profiles.active来指定项目启动时使用的配置文件是哪个。
例如:在测试环境需要使用application-test.properties则在application.properties中配置spring.profiles.active=test即可.
如果不配置application.properties也可以在启动jar包时通过命令行 --spring.profiles.active=***来指定要使用的配置文件是哪个.
#设置主入口
server.servlet.context-path=/
#端口号
server.port=8081
#设置编码格式
spring.http.encoding.charset=UTF-8
spring.http.encoding.force=true
spring.http.encoding.enable=true
#配置tomcat编码格式
server.tomcat.uri-encoding=UTF-8
#设置session超时时间,未指定单位时,将使用秒,必须是60的整数倍
server.servlet.session.timeout=960
#模板配置
spring.mvc.view.prefix=/page/
spring.mvc.view.suffix=.jsp
spring.mvc.static-path-pattern=/static/**
#oracle datasource
#数据源配置
spring.jpa.database=oracle
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.jdbc-url=jdbc:oracle:thin:@ip:port:oltp
spring.datasource.username=username
spring.datasource.password=password
- 常量配置
- 将项目中的需要使用的常量配置在配置文件中,方便维护
- 如果在配置文件application.properties中配置常量,则在常量类中不需要指定要加载的属性文件即可获取常量值.
- 例如:application.properties中配置了常量
constant.DepsHostPort="13350"
constant.DepsTimeOut="60000"
constant.Sign=CUKU
在常量实体类中直接获取即可
package.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @author xingpf
* @create-time 2019年6月12日 下午4:53:29
* @description:配置文件常量
*/
@Component
public class ConstantProperties {
@Value("${constant.DepsHostPort}")
private String DepsHostPort;
@Value("${constant.DepsTimeOut}")
private String DepsTimeOut;
@Value("${constant.Sign}")
private String depsSign;
public String getDepsHostPort() {
return DepsHostPort;
}
public void setDepsHostPort(String depsHostPort) {
DepsHostPort = depsHostPort;
}
public String getDepsTimeOut() {
return DepsTimeOut;
}
public void setDepsTimeOut(String depsTimeOut) {
DepsTimeOut = depsTimeOut;
}
public String getDepsSign() {
return depsSign;
}
public void setDepsSign(String depsSign) {
this.depsSign = depsSign;
}
}
- 如果常量过多,则可以单独创建常量配置文件如:constant.properties在其中配置常量,而后在创建的ConstantProperties类中通过@PropertySource指定要加载的配置文件,并对属性进行getter/setter配置即可使用.
- 多数据源配置
- 配置文件中配置好要使用的多个数据源,访问不同页面时,根据dao层mapper实现类所在包及mapper.xml所在文件夹判定应该使用哪一个数据源进行数据访问.
application.properties
#设置主入口
server.servlet.context-path=/
#端口号
server.port=8081
#设置编码格式
spring.http.encoding.charset=UTF-8
spring.http.encoding.force=true
spring.http.encoding.enable=true
#配置tomcat编码格式
server.tomcat.uri-encoding=UTF-8
#设置session超时时间,未指定单位时,将使用秒,必须是60的整数倍
server.servlet.session.timeout=960
#模板配置
spring.mvc.view.prefix=/page/
spring.mvc.view.suffix=.jsp
spring.mvc.static-path-pattern=/static/**
#oracle datasource
#数据源1
spring.jpa.database=oracle
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.jdbc-url=jdbc:oracle:thin:@ip:port:oltp
spring.datasource.username=username1
spring.datasource.password=password1
#数据源2
spring.datasources.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasources.jdbc-url=jdbc:oracle:thin:@ip:port:oltp
spring.datasources.username=username2
spring.datasources.password=password2
- 在config包下配置数据源
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "fpOracleSqlSessionFactory")
public class DataSourceConfig {
// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.dao.fpms";
static final String MAPPER_LOCATION = "classpath:mapper/fpms/*.xml";
@Bean(name = "fpDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
@Primary
public DataSource datasource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "fpOracleSqlSessionFactory")
@Primary
public SqlSessionFactory fpSqlSessionFactory(@Qualifier("fpDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new
PathMatchingResourcePatternResolver()
.getResources(DataSourceConfig.MAPPER_LOCATION));
return sessionFactoryBean.getObject();
}
//配置事务
@Bean(name = "fpTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager(@Qualifier("fpDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "fpSqlSessionTemplate")
@Primary
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("fpOracleSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
数据源2的配置:
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
/**
* @create-time 2019年6月13日 上午11:26:58
* @description:数据源配置
*/
@Configuration
//扫描 Mapper 接口并容器管理
@MapperScan(basePackages = DataSourceConfigDeps.PACKAGE, sqlSessionFactoryRef = "depsOracleSqlSessionFactory")
public class DataSourceConfigDeps {
// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.dao.deps";
static final String MAPPER_LOCATION = "classpath:mapper/deps/*.xml";
@Bean(name = "depsDataSource")
@ConfigurationProperties(prefix = "spring.datasources")
public DataSource datasource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "depsOracleSqlSessionFactory")
public SqlSessionFactory fpSqlSessionFactory(@Qualifier("depsDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new
PathMatchingResourcePatternResolver()
.getResources(DataSourceConfigDeps.MAPPER_LOCATION));
return sessionFactoryBean.getObject();
}
//配置事务
@Bean(name = "depsTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("depsDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "depsSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("depsOracleSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}