Eine Geschichte bei der Entwicklung eines Backends mit SpringBoot.
Seit Docker herauskommt, besteht heutzutage die Tendenz, von der Kombination bis zur Produktion mit einem Modul und einer Quelle bis zum Ende zu arbeiten.
Die Unterscheidung zwischen den einzelnen Umgebungen basiert auf der Entwurfspolitik, einfach Umgebungsargumente von außen zu übergeben. Daher werde ich zusammenfassen, was mit dem Anwendungsmodul zu tun ist, das mit Spring Boot erstellt wurde
Die offiziellen Informationen finden Sie weiter unten. Sie können dies hier tun. Offiziell
Wenn Sie Folgendes in das Startargument aufnehmen,
-Dspring.profiles.active=dev1
Es ist eine Spezifikation, dass die folgenden Dateien gelesen werden.
src/main/resource/application-dev1.properties」
Verwenden Sie die Maven-Funktion, um die Einstellungsdatei zu wechseln, wenn Sie ein Modul verfestigen und es in ein Glas oder einen Krieg verwandeln. Der einfachste Weg, um Konfigurationsdateien zu wechseln, besteht darin, Dateien zur Erstellungszeit zu übertragen.
pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
<webResources>
<resource>
<directory>${basedir}/release/${project.stage}</directory>
</resource>
</webResources>
<useCache>false</useCache>
<!--Wegen Warnfehler hinzugefügt--> <failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<manifest>
<!--Hauptklassenspezifikation (falls erforderlich)--> <mainClass>jp.co.●●.●●.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<profiles>
<profile>
<id>dev1</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.stage>dev01</project.stage>
</properties>
</profile>
<profile>
<id>dev02</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<project.stage>dev02</project.stage>
</properties>
</profile>
</profiles>
Da es möglich ist, Shell-Befehle intern zu integrieren, Für diejenigen, die an Maven gewöhnt sind, ist es bekannt.
Erstens hat die Springboot-Profilumschaltmethode ein festes Eigenschaftendateiformat, was es sehr schwierig macht, Einstellungen wie das Lesen mehrerer Dateien vorzunehmen. Es mangelt an Flexibilität, insbesondere wenn die Umgebung zunimmt.
Zweitens ist die Umschaltmethode für das Maven-Profil eine Einstellung, bei der nur ein bestimmtes Modul in einer bestimmten Umgebung funktioniert, wenn mehrere Dateien gelesen werden. Wenn also ein Fehler oder ein Prozedurfehler in der Bereitstellungsshell usw. auftritt, tritt ein Fehler auf. Die Wahrscheinlichkeit ist hoch.
Verwenden Sie ApplicationContextInitializer, um das Profil beim Start festzulegen.
Spezifikation des Java-Startarguments → Mit ApplicationContextInitializer im Profil angeben Mit dieser Methode können Sie gruppieren, wenn Sie das Profil angeben. Bei Ausführung mit dev01 kann es zwei Informationen enthalten, dev und dev01.
java -Dproject.stage=dev01 hoge.war
public class SpringActiveProfileInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
/**Logger*/
private static final Logger LOG = LoggerFactory.getLogger(SpringActiveProfileInitializer.class);
@Override
public void initialize(final ConfigurableApplicationContext applicationContext) {
//Startargument abrufen (dev01)
String projectStage = System.getProperty("project.stage");
//Bootgruppe abrufen (dev)
String prjectStageGroup = projectStage.replaceAll("[0-9]+", "");
ConfigurableEnvironment env = applicationContext.getEnvironment();
if (StringUtils.equals(projectStage, prjectStageGroup)) {
env.setActiveProfiles(projectStage);
} else {
env.setActiveProfiles(prjectStageGroup);
env.addActiveProfile(projectStage);
}
if (LOG.isDebugEnabled()) {
// setting spring.profiles.active = [dev, dev01]
LOG.debug("setting spring.profiles.active = {}", Arrays.asList(env.getActiveProfiles()));
}
}
}
web-fragment.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-fragment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:webfragment="http://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_0.xsd" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_0.xsd"
version="3.0">
<!--Setzen Sie ProjectStage in den JVM-Systemparametern auf Spring Active Profile-->
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>jp.co.future.project.palette.common.context.SpringActiveProfileInitializer</param-value>
</context-param>
</xml>
Das Profil kann sogar in XML beschrieben werden Definitionsdateien können für jede Umgebung getrennt werden
Obwohl im Beispiel beschrieben, sind Einstellungen wie Gemeinsamkeit und Lesen externer Dateien ebenfalls möglich.
<beans profile="dev">
<!--Datenquelle-->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="jdbcUrl" value=""/>
</bean>
</beans>
<beans profile="stg">
<!--Datenquelle-->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="jdbcUrl" value=""/>
</bean>
</beans>
<!--Es können mehrere Stufen angegeben werden, indem sie durch Kommas getrennt werden-->
<beans profile="dev,stg">
<bean id="redis" >
</bean>
</beans>
<beans profile="dev01">
<!--Eigenschaftendateien können auch aus XML gelesen werden-->
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="location" value="classpath:config/connect-config-dev01.properties" />
</bean>
</beans>
<!--Es ist auch möglich, die XML selbst zu importieren-->
<import resource="classpath:META-INF/common-context.xml" />
So wechseln Sie die Umgebung mit Spring Boot. Ein Modul, eine Quelle!
Recommended Posts