SpringBoot結合Druid配置JNDI多數據源

Tomcat配置JNDI(%TOMCAT_HOME%/conf/context.xml)

<!-- 主庫 -->
<Resource name="jdbc/master" auth="Container" maxActive="100" maxIdle="30" maxWait="10000" 
factory="com.alibaba.druid.pool.DruidDataSourceFactory" filters="stat" 
useGlobalDataSourceStat="true" defaultTransactionIsolation="READ_COMMITTED" validationQuery="select 1 from DUAL"
type="javax.sql.DataSource" username="test" password="test" driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=PRC&amp;useSSL=false&amp;rewriteBatchedStatements=TRUE&amp;autoReconnect=true&amp;allowMultiQueries=true"/>

<!-- 從庫 -->
<Resource name="jdbc/cluster" auth="Container" maxActive="100" maxIdle="30" maxWait="10000" 
factory="com.alibaba.druid.pool.DruidDataSourceFactory" filters="stat" 
useGlobalDataSourceStat="true" defaultTransactionIsolation="READ_COMMITTED" validationQuery="select 1 from DUAL"
type="javax.sql.DataSource" username="test" password="test" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@//127.0.0.1:1521/GHSTEST"/>

Tomcat配置Druid監控(%TOMCAT_HOME%/conf/web.xml)

<servlet>
	<servlet-name>DruidStatView</servlet-name>
	<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
	<init-param>
		<!-- 容許清空統計數據 -->
		<param-name>resetEnable</param-name>
		<param-value>true</param-value>
		</init-param>
		<init-param>
		<!-- 用戶名 -->
		<param-name>loginUsername</param-name>
		<param-value>admin</param-value>
	</init-param>
	<init-param>
		<!-- 密碼 -->
		<param-name>loginPassword</param-name>
		<param-value>admin</param-value>
	</init-param>
</servlet> 
<servlet-mapping>
	<servlet-name>DruidStatView</servlet-name>
	<url-pattern>/druid/*</url-pattern>
</servlet-mapping>

訪問地址:http://localhost:8080/druid/login.htmlhtml

yml配置

db:
  datasource:
    jndiName:
      masterDB: java:comp/env/jdbc/master
      clusterDB: java:comp/env/jdbc/cluster

master配置

@Configuration
@MapperScan(basePackages = "cn.com.test.dao.master", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterBaseDataSourceConfig {

    @Value("${db.datasource.jndiName.masterDB}")
    private String jndiName;

    @Primary
    @Bean(name = "masterDataSource")
    public DataSource masterDataSource() {
        JndiDataSourceLookup lookup = new JndiDataSourceLookup();
        lookup.setResourceRef(true);
        return lookup.getDataSource(jndiName);
    }

    @Primary
    @Bean(name = "masterTransactionManager")
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(masterDataSource());
    }

    @Primary
    @Bean(name = "masterSqlSessionFactory")
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/master/*.xml"));
        return sessionFactory.getObject();
    }
}

cluster配置

@Configuration
@MapperScan(basePackages = "cn.com.test.dao.cluster", sqlSessionFactoryRef = "clusterSqlSessionFactory")
public class ClusterBaseDataSourceConfig {

    @Value("${db.datasource.jndiName.clusterDB}")
    private String jndiName;

    @Bean(name = "clusterDataSource")
    public DataSource clusterDataSource() {
        JndiDataSourceLookup lookup = new JndiDataSourceLookup();
        lookup.setResourceRef(true);
        return lookup.getDataSource(jndiName);
    }

    @Bean(name = "clusterTransactionManager")
    public DataSourceTransactionManager clusterTransactionManager() {
        return new DataSourceTransactionManager(clusterDataSource());
    }

    @Bean(name = "clusterSqlSessionFactory")
    public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource clusterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(clusterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/cluster/*.xml"));
        return sessionFactory.getObject();
    }
}

ojdbc6.jar
mysql-connector-java-6.0.6.jar
druid-1.1.10.jar
記得把mysql驅動,Oracle驅動,Druid jar拷貝到%TOMCAT_HOME%/lib下java

相關文章
相關標籤/搜索