qq_33333654
AFinal翻车鱼
采纳率25%
2019-06-28 17:14

springboot2如何将数据源配置到tomcat的context.xml中并交给spring的DruidDataSource对象?

20
已采纳

环境:
1、springboot2 jpa tomcat8
2、启动方式:tomcat8启动
3、没有xml文件和其他配置文件,全部要集成到yml文件中

我需要详细的代码,包括config文件中引入的包。

数据源的相关配置全部要放到tomcat的context.xml中。

如果可以,最好使用JNDI

愿意有偿酬谢,我QQ529629886

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • keepsl keepsl 2年前

    已经测试验证,两步即可:
    1、yml配置如下
    jndi-datasource: #jndi数据源的配置
    open: true #是否开启jndi配置
    jndiNameList: #开启jndi配置时,配置如下信息,spring.datasource不在生效
    - dataSourceName: dataSource
    dialect: oracle
    jndiName: java:comp/env/jdbc/ccense
    - dataSourceName: dataSource2
    dialect: oracle
    jndiName: java:comp/env/jdbc/face
    2、创建JndiDataSourceConfig.java
    @ConditionalOnProperty(prefix = "jndi-datasource", name = "open", havingValue = "true")
    @Configuration
    @EnableTransactionManagement(order = 2)
    @Slf4j
    public class JndiDataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "newcap.jndi-datasource")
    public JNDIProperties jndiProperties() {
        JNDIProperties jndiProperties = new JNDIProperties();
        return jndiProperties;
    }
    
    @Bean(name = "dataSource")
    public DynamicDataSource dataSource() {
        HashMap<Object, Object> hashMap = new HashMap<>();
    
        JNDIProperties jndiProperties = jndiProperties();
    
        for (JndiProperties properties : jndiProperties.getJndiNameList()){
            DataSourceDialect.dataSourceNameDialect.put(properties.getDataSourceName(), properties.getDataSourceName());
    
            JndiDataSourceLookup lookup = new JndiDataSourceLookup();
            lookup.setResourceRef(true);
            DataSource dataSource = lookup.getDataSource(properties.getJndiName());
            hashMap.put(properties.getDataSourceName(), dataSource);
        }
    
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
    
        dynamicDataSource.setTargetDataSources(hashMap);
        //设置主数据源
        dynamicDataSource.setDefaultTargetDataSource(hashMap.get(DatasourceEnum.DATA_SOURCE));
        return dynamicDataSource;
    }
    

    }

    点赞 评论 复制链接分享
  • u011126065 jasondyoung 2年前
    (1)配置tomcat的context.xml文件中,增加如下配置
    
    <Resource name="jdbc/mbr"  
        factory="com.alibaba.druid.pool.DruidDataSourceFactory"  
        auth="Container"  
        type="javax.sql.DataSource"  
        driverClassName="oracle.jdbc.OracleDriver"  
        url="jdbc:oracle:thin:@//192.168.1.5:1901/testdb"  
        username="root"  
        password="root"  
        maxActive="50"  
        maxWait="10000"  
        removeabandoned="true"  
        removeabandonedtimeout="60"  
        logabandoned="false"  
    
        filters="stat" />
    
    (2)yml配置文件中引用
    
    spring:
      datasource:
        jndiName:
          masterDB: java:comp/env/jdbc/master
          clusterDB: java:comp/env/jdbc/mbr
                type: org.springframework.jndi.JndiObjectFactoryBean
                druid:
                    # 下面为连接池的补充设置,应用到上面所有数据源中
                    # 初始化大小,最小,最大
                    initial-size: 5
                    min-idle: 5
                    max-active: 20
                    # 配置获取连接等待超时的时间
                    max-wait: 60000
                    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
                    time-between-eviction-runs-millis: 60000
                    # 配置一个连接在池中最小生存的时间,单位是毫秒
                    min-evictable-idle-time-millis: 300000
                    validation-query: SELECT 1 FROM DUAL
                    test-while-idle: true
                    test-on-borrow: false
                    test-on-return: false
                    # 打开PSCache,并且指定每个连接上PSCache的大小
                    pool-prepared-statements: true
                    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
                    max-pool-prepared-statement-per-connection-size: 20
                    filters: stat,wall
                    use-global-data-source-stat: true
                    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
                    connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
                    # 配置监控服务器
                    stat-view-servlet:
                        login-username: admin
                        login-password: 123456
                        reset-enable: false
                        url-pattern: /druid/*
                        # 添加IP白名单
                        #allow:
                        # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
                        #deny:
                    web-stat-filter:
                        # 添加过滤规则
                        url-pattern: /*
                        # 忽略过滤格式
                        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
    
    
    
    
    点赞 1 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 2年前
    点赞 评论 复制链接分享