zoukankan      html  css  js  c++  java
  • SpringBoot-Druid多数据源

    Druid是由阿里巴巴开发的一个数据库连接池,还有日志监控功能,挺好奇的,试着用一下。

    1. pom添加相关依赖,这里使用JdbcTemplate简单测试,所以添加spring-boot-starter-jdbc
      		<dependency>
      			<groupId>com.alibaba</groupId>
      			<artifactId>druid-spring-boot-starter</artifactId>
      			<version>1.1.10</version>
      		</dependency>
      		<dependency>
      			<groupId>mysql</groupId>
      			<artifactId>mysql-connector-java</artifactId>
      		</dependency>
      		<dependency>
      			<groupId>org.springframework.boot</groupId>
      			<artifactId>spring-boot-starter-jdbc</artifactId>
      		</dependency>
      
    2. 分别创建两个数据源的属性文件druid.properties和druid1.properties
       druid.properties
      #druid.properties
      spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true
      spring.datasource.druid.one.username=root
      spring.datasource.druid.one.password=Shi18740961619?
      spring.datasource.druid.one.driver-class-name=com.mysql.jdbc.Driver
      
      spring.datasource.druid.one.initial-size=5
      spring.datasource.druid.one.max-active=50
      spring.datasource.druid.one.min-idle=1
      spring.datasource.druid.one.max-wait=60000
      spring.datasource.druid.one.pool-prepared-statements=false
      #spring.datasource.druid.one.max-pool-prepared-statement-per-connection-size=
      #spring.datasource.druid.one.max-open-prepared-statements= #和上面的等价
      spring.datasource.druid.one.validation-query=SELECT 1 FROM DUAL
      #spring.datasource.druid.one.validation-query-timeout=
      spring.datasource.druid.one.test-on-borrow=true
      spring.datasource.druid.one.test-on-return=false
      spring.datasource.druid.one.test-while-idle=false
      spring.datasource.druid.one.time-between-eviction-runs-millis=60000
      spring.datasource.druid.one.min-evictable-idle-time-millis=300000
      #spring.datasource.druid.one.max-evictable-idle-time-millis=
      spring.datasource.druid.one.filters=stat,wall,slf4j
      

       druid1.properties

      #druid1.properties
      spring.datasource.druid.two.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=true spring.datasource.druid.two.username=root spring.datasource.druid.two.password=Shi18740961619? spring.datasource.druid.two.driver-class-name=com.mysql.jdbc.Driver spring.datasource.druid.two.initial-size=5 spring.datasource.druid.two.max-active=50 spring.datasource.druid.two.min-idle=1 spring.datasource.druid.two.max-wait=60000 spring.datasource.druid.two.pool-prepared-statements=false #spring.datasource.druid.two.max-pool-prepared-statement-per-connection-size= #spring.datasource.druid.two.max-open-prepared-statements= #和上面的等价 spring.datasource.druid.two.validation-query=SELECT 1 FROM DUAL #spring.datasource.druid.two.validation-query-timeout= spring.datasource.druid.two.test-on-borrow=true spring.datasource.druid.two.test-on-return=false spring.datasource.druid.two.test-while-idle=false spring.datasource.druid.two.time-between-eviction-runs-millis=60000 spring.datasource.druid.two.min-evictable-idle-time-millis=300000 #spring.datasource.druid.two.max-evictable-idle-time-millis= spring.datasource.druid.two.filters=stat,wall,slf4j
    3. 分别创建两个数据源的配置文件(例如:DruidConfiguration.java和DruidConfiguration1.java)。因为用的是JdbcTemplate,所以需要在不同的文件中注册不同的JdbcTemplate。如果使用Mybatis,使用@MapperScan,扫描不同的Mapper,再分别注册SqlSessionFactory,Mybatis自动查找相应的数据源。

      DruidConfiguration.java
      @Configuration
      @PropertySource(value = "classpath:properties/druid.properties")
      public class DruidConfiguration {
      
          @Primary
          @Bean("druidDataSourceOne")
          @ConfigurationProperties(prefix = "spring.datasource.druid.one")
          public DataSource druidDataSourceOne(){
              return DruidDataSourceBuilder.create().build();
          }
      
          @Bean
          public JdbcTemplate jdbcTemplate(){
              return new JdbcTemplate(druidDataSourceOne());
          }
          /**
           * 注册一个StatViewServlet
           * @return
           */
          @Bean
          public ServletRegistrationBean druidStatViewServlet(){
              //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
              ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
      
              //添加初始化参数:initParams
              //白名单:
              servletRegistrationBean.addInitParameter("allow","127.0.0.1");
              //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
              servletRegistrationBean.addInitParameter("deny","192.168.1.73");
              //登录查看信息的账号密码.
              servletRegistrationBean.addInitParameter("loginUsername","admin");
              servletRegistrationBean.addInitParameter("loginPassword","123456");
              //是否能够重置数据.
              servletRegistrationBean.addInitParameter("resetEnable","false");
              return servletRegistrationBean;
          }
      
          /**
           * 注册一个:filterRegistrationBean
           * @return
           */
          @Bean
          public FilterRegistrationBean druidStatFilter(){
      
              FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
      
              //添加过滤规则.
              filterRegistrationBean.addUrlPatterns("/*");
      
              //添加不需要忽略的格式信息.
              filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
              return filterRegistrationBean;
          }
      
      
      
      }
      

       DruidConfiguration1.java

      @Configuration
      @PropertySource(value = "classpath:properties/druid1.properties")
      public class DruidConfiguration1 {
      
          @Bean("druidDataSourceTwo")
          @ConfigurationProperties(prefix = "spring.datasource.druid.two")
          public DataSource druidDataSourceTwo(){
              return DruidDataSourceBuilder.create().build();
          }
          /**
           * 注册一个StatViewServlet
           * @return
           */
      
          @Bean
          public JdbcTemplate jdbcTemplate1(){
              return new JdbcTemplate(druidDataSourceTwo());
          }
      
          @Bean
          public ServletRegistrationBean druidStatViewServlet1(){
              //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
              ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
      
              //添加初始化参数:initParams
              //白名单:
              servletRegistrationBean.addInitParameter("allow","127.0.0.1");
              //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
              servletRegistrationBean.addInitParameter("deny","192.168.1.73");
              //登录查看信息的账号密码.
              servletRegistrationBean.addInitParameter("loginUsername","admin");
              servletRegistrationBean.addInitParameter("loginPassword","123456");
              //是否能够重置数据.
              servletRegistrationBean.addInitParameter("resetEnable","false");
              return servletRegistrationBean;
          }
      
      
      
          /**
           * 注册一个:filterRegistrationBean
           * @return
           */
          @Bean
          public FilterRegistrationBean druidStatFilter1(){
      
              FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
      
              //添加过滤规则.
              filterRegistrationBean.addUrlPatterns("/*");
      
              //添加不需要忽略的格式信息.
              filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
              return filterRegistrationBean;
          }
      
      
      }
      
    4. 测试不同的数据源。
      @RestController
      public class HelloController {
      
          private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
      
          @Autowired
          private JdbcTemplate jdbcTemplate;
      
          @Autowired
          private JdbcTemplate jdbcTemplate1;
      
          @RequestMapping("/hello")
          public List<Map<String, Object>> hello(){
              List<Map<String, Object>> list = jdbcTemplate.queryForList("SELECT * FROM tb_user ", new Object[]{});
              return list;
          }
      
          @RequestMapping("/hello1")
          public List<Map<String, Object>> hello1(){
              List<Map<String, Object>> list = jdbcTemplate1.queryForList("SELECT * FROM TB_PRODUCT ", new Object[]{});
              return list;
          }
      
      }
      
    5. 查看监控界面 http://localhost:8080/druid 可以看到有两个数据源





  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/king-peng/p/10251032.html
Copyright © 2011-2022 走看看