本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
本来今天我是有其他安排的,但是今天群里有一位同学在使用 SpringBoot 整合 Druid。我发现她搞了一上午了,一个整合还没搞定,我都替她着急了。于是便有这篇 SpringBoot 整合 Druid 的教程!
这位同学,在启动项目后报:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 异常。详细异常如下所示:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class
这个异常大致看一下就是知道了,是配置的问题。url 肯定没配置正确。所以,我就给她完整的写了一个 demo。并且给她升级了一下,实现了多数据源的功能。
要整合 Druid 只需要简单的几步即可完成。我这里使用 druid-spring-boot-starter 来进行整合,因为 SpringBoot 最提倡的做法就是引用 starter。
第一步,我们只需在 Maven 中引入下面的配置:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
版本大家可以自己根据需要进行选择。
第二步,application.properties 加入数据库源配置。
spring.datasource.url=jdbc:mysql://localhost:3306/xttblog spring.datasource.username=xttblog spring.datasource.password=xttblog # ...其他配置(可选,不是必须的,使用内嵌数据库的话上述三项也可省略不填)
第三步,我们创建一个 UserRepository 用来测试,这个 UserRepository 就是我们的 Dao。
package com.xttblog.druid.demo.dao; import com.xttblog.druid.demo.model.User; import org.springframework.data.repository.CrudRepository; // 业余草:www.xttblog.com public interface UserDao extends CrudRepository<User, Long> {}
第四步,创建我们的 User 实体类。
package com.xttblog.druid.demo.model; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // get/set 省略 }
第五步,测试我们的项目是否搭建完成。
package com.xttblog.druid.demo.test; import com.xttblog.druid.demo.dao.UserDao; import com.xttblog.druid.demo.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import javax.annotation.PostConstruct; // 业余草:www.xttblog.com @Configuration @Profile("default") public class InitConfigurer{ @Autowired private UserDao userDao; @PostConstruct public void init(){ for (int i = 1; i <= 100; i++) { // 循环添加 100 个对象。 userDao.save(new User("TEST-NAME-XTTBLOG-" + i)); } } }
没有第六步了,如果有那就把启动类给算上。
package com.xttblog.druid.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
SpringBoot 整合 Druid 就这么简单。下面我们对配置属性多扯一点。
spring.datasource.druid.url= # 或spring.datasource.url= spring.datasource.druid.username= # 或spring.datasource.username= spring.datasource.druid.password= # 或spring.datasource.password= spring.datasource.druid.driver-class-name= #或 spring.datasource.driver-class-name=
上面的配置是等价的。前面我们根本就没有配置 spring.datasource.driver-class-name 属性。为什么可以不配置呢?很简单 driver-class-name 属性 Druid 可以根据 url 推断出来,够智能吧。
连接池和监控配置示例如下:
#连接池配置 spring.datasource.druid.initial-size= spring.datasource.druid.max-active= spring.datasource.druid.min-idle= spring.datasource.druid.max-wait= spring.datasource.druid.pool-prepared-statements= spring.datasource.druid.max-pool-prepared-statement-per-connection-size= spring.datasource.druid.max-open-prepared-statements= #和上面的等价 spring.datasource.druid.validation-query= spring.datasource.druid.validation-query-timeout= spring.datasource.druid.test-on-borrow= spring.datasource.druid.test-on-return= spring.datasource.druid.test-while-idle= spring.datasource.druid.time-between-eviction-runs-millis= spring.datasource.druid.min-evictable-idle-time-millis= spring.datasource.druid.max-evictable-idle-time-millis= spring.datasource.druid.filters= #配置多个英文逗号分隔 #监控配置 # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter spring.datasource.druid.web-stat-filter.enabled= #是否启用StatFilter默认值true spring.datasource.druid.web-stat-filter.url-pattern= spring.datasource.druid.web-stat-filter.exclusions= spring.datasource.druid.web-stat-filter.session-stat-enable= spring.datasource.druid.web-stat-filter.session-stat-max-count= spring.datasource.druid.web-stat-filter.principal-session-name= spring.datasource.druid.web-stat-filter.principal-cookie-name= spring.datasource.druid.web-stat-filter.profile-enable= # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置 spring.datasource.druid.stat-view-servlet.enabled= #是否启用StatViewServlet默认值true spring.datasource.druid.stat-view-servlet.url-pattern= spring.datasource.druid.stat-view-servlet.reset-enable= spring.datasource.druid.stat-view-servlet.login-username= spring.datasource.druid.stat-view-servlet.login-password= spring.datasource.druid.stat-view-servlet.allow= spring.datasource.druid.stat-view-servlet.deny= # Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置 spring.datasource.druid.aop-patterns= # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
多数据源 application-multi-datasource.properties 配置示例如下:
spring.datasource.url= spring.datasource.username= spring.datasource.password= # Druid 数据源配置,继承spring.datasource.* 配置,相同则覆盖 ... spring.datasource.druid.initial-size=5 spring.datasource.druid.max-active=5 ... # Druid 数据源 1 配置,继承spring.datasource.druid.* 配置,相同则覆盖 ... spring.datasource.druid.one.max-active=10 spring.datasource.druid.one.max-wait=10000 ... # Druid 数据源 2 配置,继承spring.datasource.druid.* 配置,相同则覆盖 ... spring.datasource.druid.two.max-active=20 spring.datasource.druid.two.max-wait=20000 ...
注意:Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效。
多数据源的创建示例如下:
@Configuration @Profile("multi-datasource") public class MultiDataSourceConfigurer { @Primary @Bean(initMethod = "init") @ConfigurationProperties("spring.datasource.druid.one") public DataSource dataSourceOne(){ return DruidDataSourceBuilder.create().build(); } @Bean(initMethod = "init") @ConfigurationProperties("spring.datasource.druid.two") public DataSource dataSourceTwo(){ return DruidDataSourceBuilder.create().build(); } }
OK,一切就是这么简单。
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » SpringBoot 整合 druid-spring-boot-starter 实现多数据源配置