环境搭建
创建表
在mysql数据库中新建数据库,并新建表。
此处建立数据库tryspring,新建表为users。
users表的字段有:
userid(int)
username(varchar)
usersex(varchar)
创建项目
依旧是创建springboot的web项目。
修改POM文件,添加依赖
标签下添加如下依赖。
相关依赖可查阅mvnrepository.com
。
<!-- Thymeleaf启动器坐标 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- JDBC启动器坐标 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- 数据库驱动坐标 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
配置数据源
通过自定义配置文件方式配置数据源信息
添加Druid数据源依赖
<!-- Druid数据源依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
创建Properties文件
在resources目录下创建jdbc.properties。
若useSSL=TRUE
可能会在未配置相关文件的情况下出现警告,且FALSE需要大写!
mysql8.0以上需要额外添加serverTimezone=UTC
。
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tryspring?useUnicode=true&characterEncoding=utf-8&useSSL=FALSE&serverTimezone=UTC
jdbc.username=root
jdbc.password=pwd
创建配置类
创建JdbcConfiguration。
通过@PropertySource读取配置文件
/**
* 数据源JDBC的配置类
*/
@Configuration
@PropertySource("classpath:/jdbc.properties") //加载指定的properties配置文件
public class JdbcConfiguration {
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
/**
* 实例化Druid
*/
@Bean
public DataSource getDataSource() {
DruidDataSource source = new DruidDataSource();
source.setDriverClassName(this.driverClassName);
source.setUrl(this.url);
source.setUsername(this.username);
source.setPassword(this.password);
return source;
}
}
测试是否成功注入properties中参数。新建JdbcController。在return 'ok'
处设置断点并且观察debug情况。
@Controller
public class UserController {
@Autowired
private DataSource dataSource; //通过断点来查看是否注入成功
@GetMapping("/showinfo")
public String showInfo() {
return "ok";
}
}
通过@ConfigurationProperties读取配置信息
JdbcProperties负责读取配置信息,JdbcConfiguration负责实例化。
使代码复用性提高。
创建配置信息实体类(JdbcProperties)
注意:
-
@ConfigurationProperties()
是SpringBoot的注解,且只能读取其application.properties的配置。 -
prefix = "jdbc"
指读取前缀为jdbc
的配置信息。 - 使用该注解时,不使用
@Vaule
填充,而是建立get和set方法。 - 需要读取的配置项的内容必须与application.properties中的属性名一致。
/**
* JDBC配置信息属性类
*/
@ConfigurationProperties(prefix = "jdbc") //是springboot的注解,只能读取springboot的application配置文件
public class JdbcProperties {
private String driverClassName;
private String url;
private String username;
private String password;
//此处不用@Value注入,而是使用get和set方法
//且方法名必须与properties里面后缀属性名一致
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
创建(修改)配置类(JdbcConfiguration)
注意:@EnableConfigurationProperties()
后跟属性类。
1.使用@Autowired注解
@Configuration
@EnableConfigurationProperties(JdbcProperties.class) //指定加载哪个配置信息属性类
public class JdbcConfiguration {
@Autowired
private JdbcProperties jdbcProperties;
/**
* 实例化Druid
*/
@Bean
public DataSource dataSource() {
DruidDataSource source = new DruidDataSource();
source.setDriverClassName(this.jdbcProperties.getDriverClassName());
source.setUrl(this.jdbcProperties.getUrl());
source.setUsername(this.jdbcProperties.getUsername());
source.setPassword(this.jdbcProperties.getPassword());
return source;
}
}
2.构建方法
@Configuration
@EnableConfigurationProperties(JdbcProperties.class) //指定加载哪个配置信息属性类
public class JdbcConfiguration {
public JdbcConfiguration(JdbcProperties jdbcProperties) {
this.jdbcProperties = jdbcProperties;
}
@Bean
public DataSource dataSource() {
DruidDataSource source = new DruidDataSource();
source.setDriverClassName(this.jdbcProperties.getDriverClassName());
source.setUrl(this.jdbcProperties.getUrl());
source.setUsername(this.jdbcProperties.getUsername());
source.setPassword(this.jdbcProperties.getPassword());
return source;
}
}
3.通过形参注入
@Configuration
@EnableConfigurationProperties(JdbcProperties.class) //指定加载哪个配置信息属性类
public class JdbcConfiguration {
@Bean
public DataSource dataSource(JdbcProperties jdbcProperties) {
DruidDataSource source = new DruidDataSource();
source.setDriverClassName(jdbcProperties.getDriverClassName());
source.setUrl(jdbcProperties.getUrl());
source.setUsername(jdbcProperties.getUsername());
source.setPassword(jdbcProperties.getPassword());
return source;
}
}
简便方法
当注解@ConfigurationProperties
用在方法前时,可无需定义实体类(JdbcProperties)。
且当需要注入的属性与properties里属性同名时,可自动注入,无需调用set方法。
@Configuration
public class JdbcConfiguration {
@Bean
@ConfigurationProperties(prefix = "jdbc") //在方法前使用,可无需实体类
public DataSource dataSource() {
//source里需要注入的属性与properties里同名时,直接注入,无需set方法
DruidDataSource source = new DruidDataSource();
return source;
}
}
通过SpringBoot配置文件配置数据源
在application.properties中配置。配置完成后相关Configuration类中无需再使用@Configuration
注解。
使用默认的HikariDataSource数据源
#使用默认HikariDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tryspring?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=112358
使用第三方Druid数据源
添加如下语句即可。
#使用Druid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource