PS 使用 Spring Boot 3.1.2 进行测试
1.使用@ConditionalOnProperty
@ConditionalOnProperty
仅当特定属性存在或具有特定值时,注释才会创建 Bean 。
在此示例中,仅当或文件中的CommandLineRunner
属性db.init.enabled
设置为 true时,才会执行。application.properties``application.yml
数据库初始化器.java
package com.yuanmomo;import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;@Component
@ConditionalOnProperty(name = "db.init.enabled",havingValue = "true",matchIfMissing = false
)
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {System.out.println("This runs when 'db.init.enabled' property is true.");}}
应用程序.属性
db.init.enabled=true
2. 使用环境
Environment
我们可以使用bean 和语句以编程方式检查条件if
。
在此示例中,CommandLineRunner
仅当属性db.init.enabled
设置为 true 时才会执行。
数据库初始化器.java
package com.yuanmomo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;@Component
public class DatabaseInitializer implements CommandLineRunner {@Autowiredprivate Environment env;@Overridepublic void run(String... args) {if ("true".equals(env.getProperty("db.init.enabled"))) {System.out.println("This runs when 'db.init.enabled' property is true.");}}
}
3.使用 Spring Profiles
仅当特定的 Spring 配置文件处于活动状态时,注释@Profile
才会创建 Bean。
在此示例中,CommandLineRunner
仅当 Spring 活动配置文件为 时, 才会执行dev
。
数据库初始化器.java
package com.yuanmomo;import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;@Component
@Profile("dev")
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {System.out.println("This runs when profile is to dev.");}
}
设置Spring 活动配置文件的不同方法。
应用程序.属性
spring.profiles.active=dev
Spring Boot Maven 插件
终端
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
java -jar
终端
java -jar -Dspring.profiles.active=dev target/spring-boot-commandlinerunner-1.0.jar
4.检查其他bean是否存在
仅当应用程序上下文中存在或缺少特定 bean 时,@ConditionalOnBean和@ConditionalOnMissingBean注释才会创建 bean。
4.1 使用@ConditionalOnBean
@ConditionalOnBean
如果应用程序上下文中存在特定 bean,则注释会创建该 bean 。
在这个例子中,CommandLineRunner
只有当BookController
bean 存在于应用程序上下文中时才会执行。
数据库初始化器.java
package com.mkyong;import com.mkyong.book.BookController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Component;@Component
@ConditionalOnBean(BookController.class)
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {//...}
}
4.2 使用@ConditionalOnMissingBean
@ConditionalOnMissingBean
如果应用程序上下文中不存在特定 bean,则注释将创建该 bean 。
在这个例子中,CommandLineRunner
只有当BookController
bean 不存在于应用程序上下文中时才会执行。
数据库初始化器.java
package com.yuanmomo;import com.mkyong.book.BookController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Component;@Component
@ConditionalOnMissingBean(BookController.class)
public class DatabaseInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {//...}
}