创建一个 jdbc.properties 文件,编写 jdbc 属性 :groupId>com.alibaba druid 1.1.10
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/lxs jdbc.username=root jdbc.password=123然后编写代码:
@Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfig { @Value("${jdbc.url}") String url; @Value("${jdbc.driverClassName}") String driverClassName; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } }解读: 声明我们 JdbcConfig 是一个配置类 @PropertySource :指定属性文件的路径是 : classpath:jdbc.properties 通过 @Value 为属性注入值 通过 @Bean 将 dataSource() 方法声明为一个注册 Bean 的方法, Spring 会自动调用该方法,将方法的返回值 加入 Spring 容器中。默认的对象名 id= 方法名,可以通过 @Bean(" 自定义名字 ") ,来指定新的对象名 然后我们就可以在任意位置通过 @Autowired 注入 DataSource 了! 我们在 HelloController 中测试:
@RestController public class HelloController { @Autowired private DataSource dataSource; @GetMapping("hello") public String hello() { return "hello, spring boot!" + dataSource; } }然后 Debug 运行并查看: springBoot全注解配置 在上面的案例中,我们实验了 java 配置方式。不过属性注入使用的是 @Value 注解。这种方式虽然可行,但是不够 强大,因为它只能注入基本类型值。 在 SpringBoot 中,提供了一种新的属性注入方式,支持各种 java 基本数据类型及复杂类型的注入。 1 )我们新建一个类,用来进行属性注入:
package com.lxs.config; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix ="jdbc") public class JdbcProperties { private String url; private String driverClassName; private String username; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String password; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }在类上通过 @ConfifigurationProperties 注解声明当前类为属性读取类 prefix="jdbc" 读取属性文件中,前缀为 jdbc 的值。 在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致 需要注意的是,这里我们并没有指定属性文件的地址,所以我们需要把 jdbc.properties 名称改为 application.properties ,这是 SpringBoot 默认读取的属性文件名. 文件的创建路径: 蓝色的为spring全注解配置的类。 其他的为springBoot全注解配置的类。 既然有读取的属性的类,那么读取的属性读完,还得交给其他的类使用干活。 在 JdbcBootCoifig类 中使用这个属性:
package com.lxs.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcBootConfig { //默认的对象名是方法的名字 也可以通过输入指定方法的名字下面是例子 @Bean public DataSource dataSource(JdbcProperties jdbc) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(jdbc.getUrl()); dataSource.setDriverClassName(jdbc.getDriverClassName()); dataSource.setUsername(jdbc.getUsername()); dataSource.setPassword(jdbc.getPassword()); return dataSource; } }通过 @EnableConfigurationProperties(JdbcProperties.class) 来声明要使用 JdbcProperties 这个类的对 象。 然后你可以通过以下方式注入 JdbcProperties : 1. @Autowired 注入
@Autowired private JdbcProperties prop;
2.构造函数注入
private JdbcProperties prop; public JdbcConfig(Jdbcproperties prop){ this.prop = prop; }
3.声明有@Bean的方法参数注入
@Bean public Datasource dataSource(JdbcProperties prop){ // ... }本例中,我们采用第三种方式。 测试结果与spring全配置基本相同。 大家会觉得这种方式似乎更麻烦了,事实上这种方式有更强大的功能,也是 SpringBoot 推荐的注入方式。两者对比 关系: Relaxed binding :松散绑定 不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对 象引导。 比如:user.friend.name :代表的是 user 对象中的 friend 属性中的 name 属性,显然 friend 也是对象。@value 注解就难以完成这样的注入方式。 meta-data support :元数据支持,帮助 IDE 生成属性提示(写开源框架会用到)。 springBoot更优雅的注入 事实上,如果一段属性只有一个 Bean 需要使用,我们无需将其注入到一个类( JdbcProperties )中。而是直接在需 要的地方声明即可:
@Configuration public class JdbcConfig { @Bean // 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中 @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); return dataSource; } }我们直接把 @ConfigurationProperties(prefix = "jdbc") 声明在需要使用的 @Bean 的方法上,然后 SpringBoot 就会自动调用这个Bean (此处是 DataSource )的 set 方法,然后完成注入。使用的前 提是: 该类必须有对应属性的 set 方法!
DruidDataSource类的内部方法:
由此可见是有get,和set方法的。 优雅的注入: 三部分:
application.properties文件 带有 @Configuration 注解的配置类 controller类中自动装载类 @Autowired private DataSource dataSource;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)