springboot加载外部资源文件和注入
1.新创建一个外部资源文件 命名为jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/zcgs jdbc.username=root jdbc.password=root
2.创建一个配置类在项目启动的时候就加载配置
import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import javax.sql.DataSource; /** * @author 李康 * @version v1.0.0 **/ @Configuration @PropertySource("classpath:jdbc.properties") //加载外部资源文件 public class JdbcConfig { @Value("${jdbc.driverClassName}") //从配置文件中读取值 String driveClassName; @Value("${jdbc.url}") String url; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password; @Bean(name = "data") //xml中的bean标签 这里的bean注入IOC容器 public DataSource dataSource(){ DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setDriverClassName(driveClassName); druidDataSource.setUrl(url); druidDataSource.setUsername(username); druidDataSource.setPassword(password); return druidDataSource; }
这里的@PropertySource注解表示的是加载资源文件的位置,idea上写classpath的时候可以Alt+/使用提示
@Value表示读取资源文件中的变量并加载进来
@Bean 表示将方法的返回值加入bean对象,这个注解里面有个name属性,一般可以不加。我在注入属性的时候我用Autowired比较多,Autowired注入的时候是按照类型来注入的,如果这个时候有2个同样的类型,例如你在下面再写一个
返回值为Datasoure的bean注入进去,这个时候你就需要加上Qualifier注解来配合使用,这个时候就等同于@Resource注解,推荐使用@Resource,但是我比较懒,就算了哈哈。 这个时候基本就OK了 你可以在三层架构里面去使用
以上是纯Java读取资源文件的配置,上面的缺陷在于只能注入基本类型值,且严格一致springboot的属性注入是松散绑定的
-
不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对象引导。比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对象。@value注解就难以完成这样的注入方式。
-
meta-data support:元数据支持,帮助IDE生成属性提示(写开源框架会用到)。
标准写法:springboot读取外部资源文件并注入
1.创建一个config类读取.yml或者.properties文件中的值
/** * @author 李康 * @version v1.0.0 * @date 2020/12/21 16:02 **/ @Configuration public class JdbcSpringbootConfig { @Bean @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource(){ DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource; } }
这样就可以直接在其他文件中进行注入了,这里没有set值的原因是再找配置类的时候会反射一个set方法,刚好datasoures里面也有这个方法所以直接可以赋值使用

浙公网安备 33010602011771号