精华内容
下载资源
问答
  • 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[] ......

    更多相关内容
  • 前言 近期公司接到一需求,第方公司和我们有一款同类型的...maven构建的项目利用pom文件引入数据源需要的jar文件 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spri

    前言

    近期公司接到一个需求,第三方公司和我们有一款同类型的APP,需要保证两边公司的数据一致性(两边的同一条数据有相同的唯一标识字段),所以需要他们提供的数据库帐号查询数据进行数据同步,此时则会在项目中涉及到操作多个数据源。

    正文

    1. 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. 配置类(数据源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);
        }
    }
    
    
    
    1. 配置类(数据源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:27
    1、在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下面的数据即对应关联对应的数据源了。
    展开全文
  • connector-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();

    }

    最后写一个测试类,查看是否分别实现了对主、从数据库的操作!!!至少我实现了

    展开全文
  • JAVAJAVA数据源

    万次阅读 多人点赞 2018-11-16 15:09:19
    我们在进行数据访问,声明模板和repository之前【JAVA】Spring对JDBC的支持,都需要配置数据源用来连接数据库。数据源又可以分为两大类:直连的数据源 和 连接池的数据源 ,其中连接池的数据源又有多种,接下来就让...
  • Redis多数据源问题 redis有主从模式,集群模式,哨兵模式和单点模式。不同的模式解决不同的问题,很多情况下需要同时用到多模式。 这里仅选择使用官方推荐的Lettuce的缓存方式,如果使用jedis对象缓存,原理一样...
  • Java动态切换数据源(AOP)

    千次阅读 2021-02-25 19:37:07
    一、对比通过中间层来管理数据源,常用的有 mycat 等,但有一大缺陷,就是性能的损耗,即本身直接请求数据库的事儿,却要经过中间层来进行一次分配的操作,但是,通用性比较高。而使用客户端模式来管理数据源,直...
  • 其中数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口。应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑与...
  • 我们新做的系统可能是很多个数据源,所以我闲来无事研究一下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=
  • 上两遍已经描述了动态多数据源的原理和基础实现了,上面两篇都是从applition.yml中配置数据源的,这里再拓展补充一下其他场景,如何读取数据源不从applition.yml中配置,实现从数据库中读取数据源配置并动态切换...
  • 一、首先获取当前配置文件默认数据源及数据库中配置的所有数据源 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配置数据源种方式1,使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:DriverManagerDataSource建立连接是只要有连接就新建一connection,根本没有连接池的作用。${jdbc....
  • SpringBoot设置数据源

    千次阅读 2022-03-01 14:52:40
    SpringBoot设置个数据源,其实就是你的项目中会用到多个数据库,平时我们一般只会在配置文件中去设置一个。 设置个数据源也简单,个人理解就是重新写一下框架连接数据库的过程,然后不同的xml文件可以使用不同的...
  • 完成动态切换双数据源有些时间了,刚刚又接入了第三个数据源,顺便把这块的逻辑梳理、记录、分享一下; 交代下项目环境:springboot2.0.1, mybatis3,jdk1.8,druid 1.1.0 下面主要是贴代码了,并配以简单说明,从...
  • Java数据源配置

    千次阅读 2017-03-28 15:15:17
    今天是2017年3月28日,天气晴,空闲了好几天,今天终于接受到一个任务,笼统的说是一个数据抽取吧,其中涉及到一个知识点,就是要配置个数据源,身为一名刚毕业不到一年的菜鸟,立马去请教了组长这该如何做,组长...
  • Hibernate配置各种数据源 <!– 各属性的配置–> <!—为true表示将Hibernate发送给数据库的sql显示出来 –> ”show_sql”>true <!– SQL方言,这边设定的是MySQL –> ”dialect”>...
  • 很久之前写一篇静态的springboot...之前说的静态多数据源是每个数据源配置一套mapper,现在说说如何动态多数据源共用一套mapper,以及数据源不从applition.yml中配置,实现从数据库中读取数据源配置并动态切换数据源。
  • springboot 多数据源配置的几种方式

    千次阅读 2022-04-01 17:24:42
    springboot多数据源配置的几种方式
  • 避坑指南:Spring配置数据源种方式

    千次阅读 多人点赞 2022-01-17 21:52:44
    常见的数据源:DBCP、C3P0、BoneCP、Druid等等,本文主要以Druid数据源为案例实现Spring对数据源的开发应用
  • 遇到的坑:在读取第二个数据源的时候,配置文件中的数据读取不到,原因是底层代码有个取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...
  • 单数据配置很简单,就是在yml或者properties文件中配置一下就行,以下示例是yml文件单数据mysql的配置(配置了阿里的druid数据库连接池): spring datasource type: ...
  • SpringBoot配置数据源详解

    千次阅读 2020-07-04 22:21:45
    SpringBoot配置数据源 Spring Framework 为 SQL 数据库提供了广泛的支持。从直接使用 JdbcTemplate 进行 JDBC 访问到完全的对象关系映射(object relational mapping)技术,比如 Hibernate、Mybatis。Spring Data ...
  • druid多数据源配置

    千次阅读 2022-03-28 19:18:21
    druid多数据源配置
  • 配置数据源(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(此所谓第一阶段提交),最后如果都成功就把事务全部提交,只要有一个失败就把事务都回滚——此所谓第二阶段提交。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 403,912
精华内容 161,564
关键字:

java配置三个数据源

java 订阅