-
2021-04-17 09:53:19
目标数据源, 中 key 的值必须要和 JdbcContextHolder 类中设置的参数值相同,如果有多个值,可以配置 多个< ......
JNDI(Java Naming and Directory Interface)是用于向Java程序 提供目录和命名功能的API。 配置数据源时,需要修改Tomcat服务器的安装目录的conf下的哪个 文件? Context......
设置数据源的主要步骤有哪些?_工学_高等教育_教育专区。java,简答题,计算机科学与技术 设置数据源的主要步骤有哪些? (1)创建、修改或删除数据源选择“控制面板”......
一个JAVA包在一个发布目录下,能否连接多个数据库?我的两部分JSP程序只能显示...
下面就给出一个通过 JDBC-ODBC 桥连接 Access 数据库,但不需要配置数据源的案例: 2.案例源码实现 import java.sql.Connection; import java.sql.DriverManager; ......
其中java:comp/env/jdbc/crm的jdbc/crm是对应的服务器中数据库连接池名字,需要在对应的环境中配置 Tomcat配置如第一种Tomcat配置方式所描述,注意jndi的name根据情况......
throws Exception { return (TestObj) getSqlMapClientTemplate().queryForObject("getTestObj", objID); } } 以上就介绍了 Spring+iBatis 多数据源的配置方案。...
由于本次实验 WAS 和 DB2 在同一机器上, 这三个包又在路径 C:\\IBM\\SQLLIB\\java\\ 中,同时我前面设置了 WebSphere 变量 DB2_JDBC_DRIVER_PATH 为 C:\\IBM......
第六章 连接池与数据源 1 回顾 什么是过滤器,它的作用是什么? 过滤器实质就是一个实现了相应接口(javax.servlet.Filter)的 Java类,它处于客户端和web资源(Jsp......
//2 InitialContext context = new InitialContext(); //3:进行lookup Object obj = context.lookup("java:comp/env/jdbc/jsp05"); javax.sql.DataSource ds......
方式创建一个数据源, 此外,你还可以通过代码的方式创建一个数据源,以便进行无依赖的单元测试 配置一个数据源 Spring 在第三方依赖包中包含了两个数据源的实现类......
java:comp/env/jdbc/crm 的 jdbc/crm 是对应的服务器中数据库连接池名字,需要在对 应的环境中配置 Tomcat 配置如第一种 Tomcat 配置方式所描述,注意 jndi 的......
[关键词]数据源 连接池 连接 JAVA JDBC 中图分类号:TP3 文献标识...
介绍了 Java 的数据库访问机制 JDBC,对实际应用中出现的问题进行了分析 ,提出了 一种合理的、有效的数据库连接池方案,并且采用 JDBC 和配置属性文件的方法实现了......
MyBatis 多数据源 测试查询接口 * @author hoojo * @createDate 2013-10-10 下午04:18:08 * @file MultipleDataSourceMapper.java * @package com.hoo.ser......
Java 中常用的数据库连接池定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理 能显著影响到整个......
-- 建立 session 工厂, 并将数据源加载进来, 同时配置 hibern...
应用程序 数据源 JDBC API 驱动程序 专用API JDBC API ? JDBC API所有的类和接口都集中在java.sql 和javax.sql这两个包中驱动管理器 连接 语句 结果集 (1)......
JavaWeb开发数据库连接操作详解_IT/计算机_专业资料。详细介绍了JavaWeb与数据库连接的各项准备工作。 JAVA Web 开发中与数据库的连接操作,配置等 开发中与数据库......
配置数据源 * 2:在程序中连接数据库源 * 3: * * */ package com.jdbc; import java.sql.*; public class Demo1 { public static void main(String[] ......
更多相关内容 -
java项目如何配置多数据源(基于SpringBoot+Mybatis框架)
2020-07-16 16:20:21前言 近期公司接到一个需求,第三方公司和我们有一款同类型的...maven构建的项目利用pom文件引入数据源需要的jar文件 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spri前言
近期公司接到一个需求,第三方公司和我们有一款同类型的APP,需要保证两边公司的数据一致性(两边的同一条数据有相同的唯一标识字段),所以需要他们提供的数据库帐号查询数据进行数据同步,此时则会在项目中涉及到操作多个数据源。
正文
- maven构建的项目利用pom文件引入数据源需要的jar文件
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.0</version> </dependency> <!--mysql 连接--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--oracle 连接 如果不需要连接oracle类型的数据库 则可以注释掉如下依赖--> <!--oracle 连接 如果需要连接oracle类型的数据库 则在项目根目录(src同级)创建一个lib文件夹放一个oracle连接的jar包--> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/ojdbc6.jar</systemPath> </dependency>
ojdbc6.jar快速下载
3. 在springboot的配置文件中配置数据源需要的配置项(application.yml)datasource-mysql: validationQuery: SELECT 1 driverClassName: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://ip:port/数据库?useUnicode=true&useSSL=false&characterEncoding=utf8&characterSetResults=utf8 username: rdis password: rdis
datasource-oracle: driverClassName: oracle.jdbc.driver.OracleDriver type: com.alibaba.druid.pool.DruidDataSource url: jdbc:oracle:thin:@ip:port/数据库 username: GXCX_EK password: GXCX_EK validationQuery: SELECT 1
dbPool: # 初始化大小,最小,最大 initialSize: 10 minIdle: 30 maxActive: 100 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 testWhileIdle: true testOnBorrow: false exceptionSorter: true testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20
- 配置类(数据源1 @Primary表示主数据源)
package com.easyfly.main.config; import com.alibaba.druid.pool.DruidDataSource; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; 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; import javax.sql.DataSource; /** * @Description mysql数据源 * @Author ouyangli * @Param * @Return * @Date 2019/4/16 0016 13:41 */ @Configuration //这里写你的这个数据源需要使用的mapper接口的包路径 @MapperScan(basePackages="com.easyfly.main.dao.mysql", sqlSessionTemplateRef = "mysqlSqlSessionTemplate") //扫描到具体的包 public class MysqlDataSourceConfig { private Logger log = LoggerFactory.getLogger(this.getClass()); //精确到 具体 目录,以便跟其他数据源隔离 //这里写你的mapper接口对应的mapper.xml的路径,我这里是配置在项目的resources资源文件下 private static final String MAPPER_LOCATION = "classpath:mapping/*.xml"; @Value("${datasource-mysql.url}") private String dbUrl; @Value("${datasource-mysql.type}") private String dbtype; @Value("${datasource-mysql.username}") private String username; @Value("${datasource-mysql.password}") private String password; @Value("${datasource-mysql.driverClassName}") private String driverClassName; @Value("${datasource-mysql.validationQuery}") private String validationQuery; //以下的配置从配置文件中读取 @Value("${dbPool.initialSize}") private int initialSize; @Value("${dbPool.minIdle}") private int minIdle; @Value("${dbPool.maxActive}") private int maxActive; @Value("${dbPool.maxWait}") private int maxWait; @Value("${dbPool.timeBetweenEvictionRunsMillis}") private int timeBetweenEvictionRunsMillis; @Value("${dbPool.minEvictableIdleTimeMillis}") private int minEvictableIdleTimeMillis; @Value("${dbPool.testWhileIdle}") private boolean testWhileIdle; @Value("${dbPool.testOnBorrow}") private boolean testOnBorrow; @Value("${dbPool.testOnReturn}") private boolean testOnReturn; @Value("${dbPool.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${dbPool.maxPoolPreparedStatementPerConnectionSize}") private int maxPoolPreparedStatementPerConnectionSize; /** * 设置主数据源的参数 */ @Bean @Primary public DruidDataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl); datasource.setDbType(dbtype); datasource.setUsername(this.username); datasource.setPassword(this.password); datasource.setDriverClassName(this.driverClassName); datasource.setInitialSize(this.initialSize); datasource.setMinIdle(this.minIdle); datasource.setMaxActive(this.maxActive); datasource.setMaxWait((long) this.maxWait); datasource.setTimeBetweenEvictionRunsMillis((long) this.timeBetweenEvictionRunsMillis); datasource.setMinEvictableIdleTimeMillis((long) this.minEvictableIdleTimeMillis); datasource.setValidationQuery(this.validationQuery); datasource.setTestWhileIdle(this.testWhileIdle); datasource.setTestOnBorrow(this.testOnBorrow); datasource.setTestOnReturn(this.testOnReturn); datasource.setPoolPreparedStatements(this.poolPreparedStatements); datasource.setMaxPoolPreparedStatementPerConnectionSize(this.maxPoolPreparedStatementPerConnectionSize); return datasource; } /** * 设置数据源的事务 */ @Bean(name = "mysqlTransactionManager") @Primary public DataSourceTransactionManager mysqlTransactionManager() { log.info("---------mysqlTransactionManager-------" + "加载完成"); return new DataSourceTransactionManager(dataSource()); } /** * 连接池管道 */ @Bean(name = "mysqlSqlSessionFactory") @Primary public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("dataSource") DataSource idmDataSource) throws Exception { log.info("--------mysqlSqlSessionFactory-------" + "加载完成"); log.info("driverClassName:{}",this.driverClassName); SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(idmDataSource); sessionFactory.setMapperLocations( new PathMatchingResourcePatternResolver().getResources(MysqlDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); } /** * 数据sql模板 */ @Bean(name = "mysqlSqlSessionTemplate") @Primary public SqlSessionTemplate kdysSqlSessionTemplate( @Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
- 配置类(数据源2)
package com.easyfly.main.config; import com.alibaba.druid.pool.DruidDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 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; import javax.sql.DataSource; /** * @Description oracle数据源 * @Author ouyangli * @Param * @Return * @Date 2019/4/16 0016 13:41 */ @Configuration //这里写你的这个数据源需要使用的mapper接口的包路径 @MapperScan(basePackages="com.easyfly.main.dao.oracle", sqlSessionTemplateRef = "oracleSqlSessionTemplate") //扫描到具体的包 public class OracleDataSorceConfig { private Logger log = LoggerFactory.getLogger(this.getClass()); //精确到 具体 目录,以便跟其他数据源隔离 //这里写你的mapper接口对应的mapper.xml的路径,我这里是配置在项目的resources资源文件下 private static final String MAPPER_LOCATION = "classpath*:mapping/oracle/*.xml"; @Value("${datasource-oracle.url}") private String dbUrl; @Value("${datasource-oracle.type}") private String dbtype; @Value("${datasource-oracle.username}") private String username; @Value("${datasource-oracle.password}") private String password; @Value("${datasource-oracle.driverClassName}") private String driverClassName; @Value("${datasource-oracle.validationQuery}") private String validationQuery; //以下的配置从配置文件中读取 @Value("${dbPool.initialSize}") private int initialSize; @Value("${dbPool.minIdle}") private int minIdle; @Value("${dbPool.maxActive}") private int maxActive; @Value("${dbPool.maxWait}") private int maxWait; @Value("${dbPool.timeBetweenEvictionRunsMillis}") private int timeBetweenEvictionRunsMillis; @Value("${dbPool.minEvictableIdleTimeMillis}") private int minEvictableIdleTimeMillis; @Value("${dbPool.testWhileIdle}") private boolean testWhileIdle; @Value("${dbPool.testOnBorrow}") private boolean testOnBorrow; @Value("${dbPool.testOnReturn}") private boolean testOnReturn; @Value("${dbPool.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${dbPool.maxPoolPreparedStatementPerConnectionSize}") private int maxPoolPreparedStatementPerConnectionSize; /** * 设置主数据源的参数 */ @Bean(name="oracleDataSource") public DruidDataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl); datasource.setDbType(this.dbtype); datasource.setUsername(this.username); datasource.setPassword(this.password); datasource.setDriverClassName(this.driverClassName); datasource.setInitialSize(this.initialSize); datasource.setMinIdle(this.minIdle); datasource.setMaxActive(this.maxActive); datasource.setMaxWait((long) this.maxWait); datasource.setTimeBetweenEvictionRunsMillis((long) this.timeBetweenEvictionRunsMillis); datasource.setMinEvictableIdleTimeMillis((long) this.minEvictableIdleTimeMillis); datasource.setValidationQuery(this.validationQuery); datasource.setTestWhileIdle(this.testWhileIdle); datasource.setTestOnBorrow(this.testOnBorrow); datasource.setTestOnReturn(this.testOnReturn); datasource.setPoolPreparedStatements(this.poolPreparedStatements); datasource.setMaxPoolPreparedStatementPerConnectionSize(this.maxPoolPreparedStatementPerConnectionSize); return datasource; } /** * 设置数据源的事务 */ @Bean(name = "oracleTransactionManager") public DataSourceTransactionManager idmTransactionManager() { log.info("---------oracleTransactionManager-------" + "加载完成"); return new DataSourceTransactionManager(dataSource()); } /** * 连接池管道 */ @Bean(name = "oracleSqlSessionFactory") public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource oracleDataSource) throws Exception { log.info("--------oracleSqlSessionFactory-------" + "加载完成"); SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(oracleDataSource); sessionFactory.setMapperLocations( new PathMatchingResourcePatternResolver().getResources(OracleDataSorceConfig.MAPPER_LOCATION)); log.info("driverClassName:{}",this.driverClassName); return sessionFactory.getObject(); } @Bean(name = "oracleSqlSessionTemplate") public SqlSessionTemplate kdysSqlSessionTemplate( @Qualifier("oracleSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
总结
以上方案可以配置多个不同类型的数据源,只需要在application.yml增加你需要的数据源的配置项,在项目中增加一个配置类即可,需要注意的是,@Primary 代表主数据源,只能在其中一个配置类中使用。
-
Java多数据源配置
2020-07-26 22:19:271、在Application.yml中配置多数据源 spring: datasource: ###用户数据库 user: jdbc-url: jdbc:mysql://localhost:3306/user username: root password: root driver-class-name: com.mysql.jdbc.Driver...对于大型项目,多数据源是非常有必要的。
1、在Application.yml中配置多数据源
spring: datasource: ###用户数据库 user: jdbc-url: jdbc:mysql://localhost:3306/user username: root password: root driver-class-name: com.mysql.jdbc.Driver ###新闻数据库 news: jdbc-url: jdbc:mysql://localhost:3306/news username: root password: root driver-class-name: com.mysql.jdbc.Driver
2、创建数据源配置
package com.example.demo.mapper; 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.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.example.demo.user", sqlSessionTemplateRef = "userSqlSessionTemplate") //注1:此处user对应数据源指向的package的位置。 //即com.example.demo.user下面的数据调用将使用对应设置的数据源 public class MemberDataSourceConfig { /** * 创建数据源 * @return */ @Bean("userDataSource") @ConfigurationProperties(prefix = "spring.datasource.user") //注2:此处spring.datasource.user对应Application.yml的数据库对应配置 public DataSource userDataSource(){ return DataSourceBuilder.create().build(); } /** * 创建SqlSessionFactory * @param dataSource * @return * @throws Exception */ @Bean(name = "userSqlSessionFactory") public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(userDataSource()); return sqlSessionFactoryBean.getObject(); } /** * 创建管理器 * @param dataSource * @return */ @Bean(name = "userTransactionManager") public DataSourceTransactionManager userTranscationManager(@Qualifier("userDataSource") DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } /** * 创建模板 * @param sqlSessionFactory * @return * @throws Exception */ @Bean(name = "userSqlSessionTemplate") public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory")SqlSessionFactory sqlSessionFactory) throws Exception{ return new SqlSessionTemplate(sqlSessionFactory); } }
经过以上配置后,对应的路径com.example.demo.user下面的数据即对应关联对应的数据源了。
-
Java实现双数据源的配置(方式之一)
2021-03-10 06:37:31connector-javacom.microsoft.sqlservermssql-jdbc6.5.4.jre8-previewtestcom.microsoft.sqlserversqljdbc44.0org.aspectjaspectjweaver1.9.2二、数据源配置本文用到的两个数据...一、环境准备
新建一个Spring Boot项目,然后在pom.xml中引入相关依赖
mysql
mysql-connector-java
com.microsoft.sqlserver
mssql-jdbc
6.5.4.jre8-preview
test
com.microsoft.sqlserver
sqljdbc4
4.0
org.aspectj
aspectjweaver
1.9.2
二、数据源配置
本文用到的两个数据源分别是MySQL数据库和SqlServer数据库,其中MySQL数据库为主数据库(可自行更改)
spring:
datasource:
##配置主数据库
primary:
jdbc-url: jdbc:mysql://xx.x.x.xxx:3306/quality?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
username: xxx
password: xxx
driver-class-name: com.mysql.cj.jdbc.Driver
##配置次数据库
secondary:
jdbc-url: jdbc:sqlserver://xxx.xxx.xxx.x:1433;DatabaseName=quality
username: sa
password: xxx
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
三、创建数据源配置类
完成数据源的配置后,需创建数据源的配置类;其作用是帮助项目区分spring.datasource.primary和secondary。
第一个配置类:
package com.chinameyer.qualitymanagementsystem.config;
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 javax.sql.DataSource;
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.chinameyer.qualitymanagementsystem.dao.one", sqlSessionFactoryRef = "PrimarySqlSessionFactory")
public class PrimaryDataSourceConfig {
// 将这个对象放入Spring容器中
@Bean(name = "PrimaryDataSource")
// 表示这个数据源是默认数据源
@Primary
// 读取application.properties中的配置参数映射成为一个对象
// prefix表示参数的前缀
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource getPrimaryDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "PrimarySqlSessionFactory")
// 表示这个数据源是默认数据源
@Primary
// @Qualifier表示查找Spring容器中名字为test1DataSource的对象
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("PrimaryDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
return bean.getObject();
}
@Bean("PrimarySqlSessionTemplate")
// 表示这个数据源是默认数据源
@Primary
public SqlSessionTemplate primarySqlSessionTemplate(
@Qualifier("PrimarySqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
第二个配置类:
package com.chinameyer.qualitymanagementsystem.config;
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 javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.chinameyer.qualitymanagementsystem.dao.two", sqlSessionFactoryRef = "SecondarySqlSessionFactory")
public class SecondaryDataSourceConfig {
@Bean(name = "SecondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource getSecondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "SecondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("SecondaryDataSource") DataSource datasource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
return bean.getObject();
}
@Bean("SecondarySqlSessionTemplate")
public SqlSessionTemplate secondarySqlSessionTemplate(
@Qualifier("SecondarySqlSessionFactory") SqlSessionFactory sessionfactory) {
return new SqlSessionTemplate(sessionfactory);
}
}
四、自定义注解 @DataSource
通过自定义的注解@DataSource,方便在对数据库操作时,确定其操作的对象。
package com.chinameyer.qualitymanagementsystem.service;
/**
* @Author HongYe
* @Date 2019/12/26 9:29
*/
import java.lang.annotation.*;
@Target({ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
String value() default "primary"; //默认使用默认数据库
}
五、通过AOP的方式实现多数据源
通常可以通过分包实现多数据源的,检测多数据源存在的事务管理问题、通过jta-atomikos解决传统项目多数据源事务管理问题以及通过aop的方式实现多数据源,该处使用的是最后一种方式。
通过使用aop拦截,获取注解的属性value的值。如果value的值并没有在我们DataBaseType里面,则使用我们默认的数据源,如果有的话,则切换为相应的数据源。
package com.chinameyer.qualitymanagementsystem.service;
import com.chinameyer.qualitymanagementsystem.entity.DataSourceType;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
/**
* @Author HongYe
* @Date 2019/12/26 9:29
*/
@Aspect
@Component
public class DynamicDataSourceAspect {
@Before("@annotation(dataSource)")//拦截我们的注解
public void changeDataSource(JoinPoint point, DataSource dataSource) throws Throwable {
String value = dataSource.value();
if (value.equals("primary")){
DataSourceType.setDataBaseType(DataSourceType.DataBaseType.Primary);
}else if (value.equals("secondary")){
DataSourceType.setDataBaseType(DataSourceType.DataBaseType.Secondary);
}else {
DataSourceType.setDataBaseType(DataSourceType.DataBaseType.Primary);//默认使用主数据库
}
}
@After("@annotation(dataSource)") //清除数据源的配置
public void restoreDataSource(JoinPoint point, DataSource dataSource) {
DataSourceType.clearDataBaseType();
}
}
六、在Dao层写操作数据库的SQL语句
package com.chinameyer.qualitymanagementsystem.dao.one;
import com.chinameyer.qualitymanagementsystem.entity.SqlProvider;
import com.chinameyer.qualitymanagementsystem.service.DataSource;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import java.util.List;
/**
* @Author HongYe
* @Date 2019/12/31 10:03
*/
public interface BmDao {
/**
* 清空表中数据
*/
@DataSource
@Delete("truncate table bm")
void updateThisTable();
}
package com.chinameyer.qualitymanagementsystem.dao.two;
import com.chinameyer.qualitymanagementsystem.entity.BHGDJCLB;
import com.chinameyer.qualitymanagementsystem.entity.BM;
import com.chinameyer.qualitymanagementsystem.service.DataSource;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @Author HongYe
* @Date 2019/12/31 10:04
*/
public interface BmSecondaryDao {
/**
* 从MSSQL中获取所有的BM
* @return
*/
@DataSource("secondary")
@Select("select 部门编号 as departmentNumber,部门名称 as departmentName from bm")
List findAllEntityFromMssql();
}
最后写一个测试类,查看是否分别实现了对主、从数据库的操作!!!至少我实现了
-
【JAVA】JAVA数据源
2018-11-16 15:09:19我们在进行数据访问,声明模板和repository之前【JAVA】Spring对JDBC的支持,都需要配置数据源用来连接数据库。数据源又可以分为两大类:直连的数据源 和 连接池的数据源 ,其中连接池的数据源又有多种,接下来就让... -
Spring data redis使用java config配置redisTemplate(解决多个redis数据源问题)
2021-08-04 16:01:55Redis多数据源问题 redis有主从模式,集群模式,哨兵模式和单点模式。不同的模式解决不同的问题,很多情况下需要同时用到多个模式。 这里仅选择使用官方推荐的Lettuce的缓存方式,如果使用jedis对象缓存,原理一样... -
Java动态切换数据源(AOP)
2021-02-25 19:37:07一、对比通过中间层来管理数据源,常用的有 mycat 等,但有一个大缺陷,就是性能的损耗,即本身直接请求数据库的事儿,却要经过中间层来进行一次分配的操作,但是,通用性比较高。而使用客户端模式来管理数据源,直... -
数据源(DataSource)是什么以及SpringBoot中数据源配置
2021-04-24 02:44:04其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口。应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑与... -
springboot+Mybatis(MybatisPlus)+HikariCP多数据源动态配置(三个数据源)
2019-09-04 16:33:58我们新做的系统可能是很多个数据源,所以我闲来无事研究一下Mybatis多数据源的配置,然后连接池只要你不配置默认就是HikariCP,被称为最快速的连接池。所以我们使用HikariCP数据库连接池,需要用到aop动态切换,话不... -
Java学习 --- mybatisplus配置多数据源
2022-03-09 23:01:43一、mybatisplus配置多数据源 spring: ... # 设置默认数据源或者数据源组 primary: master strict: false datasource: master: url: jdbc:mysql://localhost:3307/mybatis_plus?characterEncoding= -
springboot动态多数据源配置和使用(从数据库读取数据源配置)(三)
2021-11-29 16:33:13上两遍已经描述了动态多数据源的原理和基础实现了,上面两篇都是从applition.yml中配置多数据源的,这里再拓展补充一下其他场景,如何读取数据源不从applition.yml中配置,实现从数据库中读取数据源配置并动态切换... -
java配置多数据源(为了实现多租户)
2020-07-28 15:43:46一、首先获取当前配置文件默认数据源及数据库中配置的所有数据源 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.... -
java 配置多数据源 切换主从
2018-04-17 16:27:12从零开始学 Java - Spring AOP 实现主从读写分离深刻讨论为什么要读写分离?为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我... -
Spring配置数据源的三种方式
2021-03-09 22:36:08Spring配置数据源的三种方式1,使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用。${jdbc.... -
SpringBoot设置多数据源
2022-03-01 14:52:40SpringBoot设置多个数据源,其实就是你的项目中会用到多个数据库,平时我们一般只会在配置文件中去设置一个。 设置多个数据源也简单,个人理解就是重新写一下框架连接数据库的过程,然后不同的xml文件可以使用不同的... -
java编码之——通过切面 实现动态切换数据源 mysql & oracle(配置多数据源)
2019-05-08 19:51:51完成动态切换双数据源有些时间了,刚刚又接入了第三个数据源,顺便把这块的逻辑梳理、记录、分享一下; 交代下项目环境:springboot2.0.1, mybatis3,jdk1.8,druid 1.1.0 下面主要是贴代码了,并配以简单说明,从... -
Java 多数据源的配置
2017-03-28 15:15:17今天是2017年3月28日,天气晴,空闲了好几天,今天终于接受到一个任务,笼统的说是一个数据抽取吧,其中涉及到一个知识点,就是要配置多个数据源,身为一名刚毕业不到一年的菜鸟,立马去请教了组长这该如何做,组长... -
Hibernate配置各种数据源详解
2013-06-29 22:03:45Hibernate配置各种数据源 <!– 各属性的配置–> <!—为true表示将Hibernate发送给数据库的sql显示出来 –> ”show_sql”>true <!– SQL方言,这边设定的是MySQL –> ”dialect”>... -
springboot动态多数据源配置和使用(二)
2021-11-29 11:07:50很久之前写一篇静态的springboot...之前说的静态多数据源是每个数据源配置一套mapper,现在说说如何动态多数据源共用一套mapper,以及数据源不从applition.yml中配置,实现从数据库中读取数据源配置并动态切换数据源。 -
springboot 多数据源配置的几种方式
2022-04-01 17:24:42springboot多数据源配置的几种方式 -
避坑指南:Spring配置数据源的三种方式
2022-01-17 21:52:44常见的数据源:DBCP、C3P0、BoneCP、Druid等等,本文主要以Druid数据源为案例实现Spring对数据源的开发应用 -
java注解方式配置多数据源以及踩过的坑
2019-06-11 13:30:09遇到的坑:在读取第二个数据源的时候,配置文件中的数据读取不到,原因是底层代码有个取username的操作,会把本机器的ip当做连接对象,解决方法两种。 第一种xml文件方式如下... -
spring boot配置多个数据源(oracle)
2020-01-02 18:30:06在自己的项目下新建一个包,新建文件依次复制粘贴下列代码 1 package ***********.datasource; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation... -
Springboot下配置多个数据源的三种方式
2019-08-28 15:26:35单数据源的配置很简单,就是在yml或者properties文件中配置一下就行,以下示例是yml文件单数据源mysql的配置(配置了阿里的druid数据库连接池): spring datasource type: ... -
SpringBoot配置数据源详解
2020-07-04 22:21:45SpringBoot配置数据源 Spring Framework 为 SQL 数据库提供了广泛的支持。从直接使用 JdbcTemplate 进行 JDBC 访问到完全的对象关系映射(object relational mapping)技术,比如 Hibernate、Mybatis。Spring Data ... -
druid多数据源配置
2022-03-28 19:18:21druid多数据源配置 -
配置数据源(mysql)
2021-01-18 20:12:54这几天在弄个小东西,要用到数据库,以前就听说过数据库连接池这个概念,所以就打算在这个小东西中加入数据库连接池。呵呵。从网上搜了一些资料。今天就整理一下。我搜到的设置基本上主要有两种方法我们以MySQL+... -
SpringBoot数据源配置和使用
2022-03-01 20:16:41一、导入依赖(记得刷新,确保导入) ... 二、进行配置(所有的配置都写在...导入后,会默认去找数据源(要告诉它数据库在哪里),故要进行配置,才可正常运行 #tomcat服务器使用的端口 server.port=80 #. -
多数据源配置和实现跨数据源事务
2020-05-26 15:47:43先说一下两阶段提交:首先多个数据源的事务分别都开起来,然后各事务分别去执行对应的sql(此所谓第一阶段提交),最后如果都成功就把事务全部提交,只要有一个失败就把事务都回滚——此所谓第二阶段提交。...