SpringBoot多配置文件、常量配置、多数据源总结

  1. 多配置文件
  • 项目开发时,为了方便,一般会配置多个配置文件,在不同的环境下使用,一般会有开发、测试、生产三个配置文件,打成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

  1. 常量配置
  • 将项目中的需要使用的常量配置在配置文件中,方便维护
  • 如果在配置文件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配置即可使用.

  1. 多数据源配置
  • 配置文件中配置好要使用的多个数据源,访问不同页面时,根据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);
		}
		
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值