时间:2021-05-19
java配置主要靠java类和一些注解,比较常用的注解有:
@Configuration :声明一个类作为配置类,代替xml文件
@Bean :声明在方法上,将方法的返回值加入Bean容器,代替 标签
@Value :基本类型或String属性注入
@PropertySource :指定外部属性文件
后面以Druid连接池配置为例,数据库名称为springboot_test
方式一
<!--pom.xml --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency># src/resources/jdbc.propertiesjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/bosjdbc.username=rootjdbc.password=123456//src\main\java\com\itheima\config\DruidConfig.java@Configuration@PropertySource("classpath:jdbc.properties")public class DruidConfig { @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.setDriverClassName(driverClassName); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; }}解读:
@Configuration :声明我们 DruidConfig是一个配置类
@PropertySource :指定属性文件的路径是: classpath:jdbc.properties
@Value 为属性注入值(只能是基本类型或String)
@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。
方式二
<!--pom.xml --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><!-- ============不添加在IDEA 会报红,但并不影响功能 ================= --><dependency> <groupId> org.springframework.boot </groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency><!--============================================================== --># src/resources/application.propertiesjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/bosjdbc.username=rootjdbc.password=123456//src\main\java\com\itheima\config\DruidConfig.java@ConfigurationProperties(prefix = "jdbc")public class DruidProperties { private String url; private String driverClassName; private String username; 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; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}//src\main\java\com\itheima\config\DruidConfig.java@Configuration@EnableConfigurationProperties(DruidProperties.class)public class DruidConfig { @Bean public DataSource dataSource(DruidProperties dp) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(dp.getDriverClassName()); dataSource.setUrl(dp.getUrl()); dataSource.setUsername(dp.getUsername()); dataSource.setPassword(dp.getPassword()); return dataSource; }}解读:
@ConfifigurationProperties注解声明当前类为属性读取类,在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致。
@EnableConfigurationProperties()声明要使用的属性读取类,使用该类有三种注入方式
@Autowired注入
//src\main\java\com\itheima\config\DruidConfig.java@Configuration@EnableConfigurationProperties(DruidProperties.class)public class DruidConfig { @Autowired private DruidProperties dp; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); //setter return dataSource; }}构造函数注入
作为
//src\main\java\com\itheima\config\DruidConfig.java@Configuration@EnableConfigurationProperties(DruidProperties.class)public class DruidConfig { private DruidProperties dp; public DruidConfig(DruidProperties dp){ this.dp = dp; } @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); //setter return dataSource; }}@Bean的方法参数注入(本例使用)
//src\main\java\com\itheima\config\DruidConfig.java@Configuration@EnableConfigurationPerProperties(DruidProperties.class)public class DruidConfig { @Bean public DataSource dataSource(DruidProperties dp) { DruidDataSource dataSource = new DruidDataSource(); //setter return dataSource; }}方式二通过属性读取类解决了@Value不能读取对象属性(如user.friend.name)的问题,但似乎就更加麻烦了
方式三(推荐使用)
事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类。
<!--pom.xml --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><!-- ============不添加在IDEA 会报红,但并不影响功能 ================= --><dependency> <groupId> org.springframework.boot </groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency><!--============================================================== --># src/resources/application.propertiesjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/bosjdbc.username=rootjdbc.password=123456@Configurationpublic class DruidConfig { @Bean @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource() { return new DruidDataSource(); }}方式四
<!--pom.xml --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency># src/resources/application.propertiesspring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/bosspring.datasource.username=rootspring.datasource.password=123456思考:为什么这种方式不需要配置类可以读取配置信息?
启动类跑main方法时候,查看SpringApplication构造方法,如下追踪
容易发现,它是从 META-INF/spring.factories 中获取类名信息,存储在一键多值的Map中,打开spring.factories,debug对比
发现键是文件蓝色部分,值是绿色部分,往回看不难发现它将这些获取的类都生成了实例,注入到IOC容器中。
打开 DataSourceProperties 发现这不是方式二吗?
点进DataSourceProperties.class
总结:当我们添加依赖后,执行启动类时自动加载DataSourceAutoConfiguration,读取DataSourceProperties类,根据默认的前缀spring.datasource在application.xml中读取信息
到此这篇关于springboot的多种配置方式的文章就介绍到这了,更多相关springboot配置方式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
多环境是最常见的配置隔离方式之一,可以根据不同的运行环境提供不同的配置信息来应对不同的业务场景,在SpringBoot内支持了多种配置隔离的方式,可以激活单个或
Springboot使用mysql实例详解开发阶段用H2即可,上线时,通过以下配置切换到mysql,springboot将使用这个配置覆盖默认的H2。1.建立数
本文介绍了springboot的maven配置依赖详解,分享给大家,具体如下:我们通过引用spring-boot-starter-parent,添加spring
Java配置也是Spring4.0推荐的配置方式,完全可以取代XML的配置方式,也是SpringBoot推荐的方式。Java配置是通过@Configuation
静态资源处理SpringBoot默认的处理方式就已经足够了,默认情况下SpringBoot使用WebMvcAutoConfiguration中配置的各种属性。建