application.yml中数据源配置:
#数据库连接 天气数据
spring:
datasource:
keshangjdbc:
url: jdbc:oracle:thin:@//10.138.16.41:1565/ods
username: supplier
password: Neusoft2017
# driver-class-name: oracle.jdbc.driver.OracleDriver
#数据库连接 客商数据
weatherjdbc:
url: jdbc:oracle:thin:@//10.138.16.41:1565/ods
username: weather
password: Neusoft2017
# driver-class-name: oracle.jdbc.driver.OracleDriver
对每中链接写一个配置类,主要是通过aop的方式链接注入到SqlSessionTemplate中,
客商的配置类如下:
package com.neusoft.interf.dataSources;
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.spring work.beans.factory.annotation.Qualifier;
import org.spring work.boot.context.properties.ConfigurationProperties;
import org.spring work.boot.jdbc.DataSourceBuilder;
import org.spring work.context.annotation.Bean;
import org.spring work.context.annotation.Configuration;
import org.spring work.context.annotation.Primary;
import org.spring work.core.io.support.PathMatchingResourcePatternResolver;
import org.spring work.jdbc.datasource.DataSourceTransactionManager;
import com.alibaba.druid.pool.DruidDataSource;
/**
* @author
* @Time:2018年12月19日 上午11:08:35
* @version 1.0
*/
@Configuration
@MapperScan( Packages = \"com.neusoft.interf.mapper.keShang\", sqlSessionTemplateRef = \"keShangSqlSessionTemplate\") //代表扫描的dao层接口,在dao层接口处理前注入数据库连接
public class keShangDataSource {
@Bean(name = \"keShangData\")
@ConfigurationProperties(prefix = \"spring.datasource.keshangjdbc\") // application.properteis中对应属性的前缀
//这里特别注意的是application.properteis中对应属性一定要和DruidDataSource的属性字段一直
@Primary
public DataSource keShangData() {
return new DruidDataSource();
}
@Bean(name = \"keShangSqlSessionFactory\")
@Primary
public SqlSessionFactory keShangSqlSessionFactory(@Qualifier(\"keShangData\") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage(\"com.neusoft.interf.entity\");//对应的实体类文件夹
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(\"classpath:mapper/keShang/*. \"));//对应的 文件夹
return bean.get ();
}
@Bean(name = \"keShangTransactionManager\")
@Primary
public DataSourceTransactionManager keShangTransactionManager(@Qualifier(\"keShangData\") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = \"keShangSqlSessionTemplate\")
@Primary
public SqlSessionTemplate keShangSqlSessionTemplate(@Qualifier(\"keShangSqlSessionFactory\") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
天气的配置类如下:
package com.neusoft.interf.dataSources;
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.spring work.beans.factory.annotation.Qualifier;
import org.spring work.boot.context.properties.ConfigurationProperties;
import org.spring work.boot.jdbc.DataSourceBuilder;
import org.spring work.context.annotation.Bean;
import org.spring work.context.annotation.Configuration;
import org.spring work.context.annotation.Primary;
import org.spring work.core.io.support.PathMatchingResourcePatternResolver;
import org.spring work.jdbc.datasource.DataSourceTransactionManager;
import com.alibaba.druid.pool.DruidDataSource;
/**
* @author
* @Time:2018年12月19日 上午11:08:35
* @version 1.0
*/
@Configuration
@MapperScan( Packages = \"com.neusoft.interf.mapper.weather\", sqlSessionTemplateRef = \"weatherSqlSessionTemplate\")
public class weatherDataSource {
@Bean(name = \"weatherData\")
@ConfigurationProperties(prefix = \"spring.datasource.weatherjdbc\") // application.properteis中对应属性的前缀
public DataSource weatherData() {
return new DruidDataSource();
// return DataSourceBuilder.create().build();
}
@Bean(name = \"weatherSqlSessionFactory\")
public SqlSessionFactory weatherSqlSessionFactory(@Qualifier(\"weatherData\") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage(\"com.neusoft.interf.entity\");
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(\"classpath:mapper/weather/*. \"));
return bean.get ();
}
@Bean(name = \"weatherTransactionManager\")
public DataSourceTransactionManager weatherTransactionManager(@Qualifier(\"weatherData\") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = \"weatherSqlSessionTemplate\")
public SqlSessionTemplate weatherSqlSessionTemplate(@Qualifier(\"weatherSqlSessionFactory\") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
如果有多个数据源,配置类中的@Primary只能写在其中一个,否则会报错。
此处有一个 技巧:
静态工具类中如果调用,springboot中bean,通过@Autowired引入bean,@PostConstruct注解方法中,把此bean
赋给静态变量
@Autowired
private DictService dictService;
@Autowired
private static DictService dictService1;
@PostConstruct
public void init() {
dictService1 = dictService;
}
public static List<Dict> getDictList(String type) {
Map<String, > dictMap = Maps.newHashMap();
List<Dict> dicts = null;
try {
dicts = dictService1.findAllList();
} catch (Exception e) {
e.printStackTrace();
}
for (Dict dict : dicts) {
List<Dict> dictList = (List<Dict>) dictMap.get(dict.getType());
if (dictList != null) {
dictList.add(dict);
} else {
dictMap.put(dict.getType(), Lists.newArrayList(dict));
}
}
List<Dict> dictList = (List<Dict>) dictMap.get(type);
if (dictList == null) {
dictList = Lists.newArrayList();
}
return dictList;
}
}
1.@PostConstruct说明
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
2.@PreDestroy说明
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。(详见下面的程序实践)
继续阅读与本文标签相同的文章
判断素数的几种方法
-
有关厂商都在积极布局功率碳化硅
2026-05-18栏目: 教程
-
反向链接对网站权重有影响吗?
2026-05-18栏目: 教程
-
国内首创:海南台风灾害影响评估三维模拟系统投入试运行
2026-05-18栏目: 教程
-
大智能时代,需要什么样的产品经理
2026-05-18栏目: 教程
-
怎样才能让用户更喜欢你的APP应用
2026-05-18栏目: 教程
