Spring Boot2.5x, 2.6x holen sich die Umgebung spring.profiles.active
Hintergrund
Nach dem Upgrade der Spring Boot-Version wurde festgestellt, dass die Annotation @Value verwendet wurde, um die Ausnahme der Umgebungsaufforderung abzurufen
Umgebungseinstellungen der alten Version
spring:
profiles:
active: dev
Die Umgebungsvariableneinstellung der neuen Version hat sich geändert
spring:
config:
activate:
on-profile: dev
Wenn die Umgebungstoolklasse zum Abrufen der Umgebung erforderlich ist, kann sie nicht gelesen werden
Lösung
Erhalten durch Injektion der Umgebungsumgebung
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.concurrent.atomic.AtomicReference;
@Component
public class EnvUtils {
@Autowired
private Environment environment;
private final AtomicReference<String> env = new AtomicReference<>();
private final AtomicReference<String> databaseName = new AtomicReference<>();
private void init() {
// 初始化环境
initEnv();
// 初始化自定义属性
initDatabaseName();
}
private void initEnv() {
if (env.get() != null) {
return;
}
env.set(environment.getActiveProfiles()[0]);
}
private void initDatabaseName() {
if (databaseName.get() != null) {
return;
}
databaseName.set(environment.getProperty("spring.datasource.clickhouse.database"));
}
public boolean isPro() {
init();
return "pro".equals(env.get());
}
public boolean notPro() {
return !isPro();
}
}
Abschweifung
Geben Sie Parameter an, wenn das Java-Programm gestartet wird
- java -jar -Dspring.profiles.active=dev
- Die Dockerfile-Datei wird in den Tod geschrieben -Dspring.profiles.active=dev
Dies kann das Problem lösen, ist aber problematisch
Holen Sie sich die Dateien unter dem Klassenpfad
Beispiel: Die Datei a.txt ist unter der Projektressource vorhanden,
um den Code abzurufen
// 获取文件
File file = org.springframework.util.ResourceUtils.getFile("classpath:a.txt");
// 得到文件后续操作..略
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));