$ tree src
src
├── main
│ ├── java
│ │ └── info
│ │ └── maigo
│ │ └── lab
│ │ └── sample
│ │ └── profiles
│ │ ├── MyData.java
│ │ ├── MyDataForDefault.java
│ │ ├── MyDataForDevelopment.java
│ │ ├── MyDataForTestAndProduction.java
│ │ ├── MyRestController.java
│ │ └── ProfilesApplication.java (← Cette fois, le contenu est omis)
│ └── resources
│ ├── application-development.properties
│ ├── application-production.properties
│ ├── application-test.properties
│ └── application.properties
MyRestController.java
Injectez des objets MyData avec la fonction DI de Spring Framework. Écrivez l'annotation @Autowired dans la variable d'instance myData. Rend les informations MyData renvoyées dans JSON lors de l'accès à http: // localhost: 8080 /.
package info.maigo.lab.sample.profiles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
@Autowired
private MyData myData;
@RequestMapping("/")
public MyData index() {
return myData;
}
}
MyData.java
Définition d'interface pour l'objet MyData. Aucune méthode n'est préparée cette fois.
package info.maigo.lab.sample.profiles;
public interface MyData {
}
MyDataForDefault.java
La classe d'implémentation MyData utilisée dans le profil par défaut. Vous pouvez spécifier le profil lors de la DI avec l'annotation @Profile. Ici, la valeur par défaut est spécifiée. Attribuez la chaîne de caractères "par défaut" au profil de variable d'instance. Attribuez message.value de application.properties au message de la variable d'instance.
package info.maigo.lab.sample.profiles;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Component
@Profile("default")
public class MyDataForDefault implements MyData {
public String profile = "default";
@Value("${message.value}")
public String message;
}
application.properties
fichier de propriétés utilisé dans le profil par défaut.
message.value=Hello, default!
Spécifiez le fichier JAR créé lors de la construction et démarrez-le. Aucun paramètre n'est ajouté pour spécifier le profil.
$ java -jar target/profiles-0.0.1-SNAPSHOT.jar
Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil par défaut sont chargées.
$ curl http://localhost:8080/
{"profile":"default","message":"Hello, default!"}
MyDataForDevelopment.java
La classe d'implémentation MyData utilisée dans le profil de développement. Spécifiez le profil de développement avec l'annotation @Profile. Attribuez la chaîne "development" au profil de variable d'instance. Affectez message.value de application-development.properties au message de variable d'instance.
package info.maigo.lab.sample.profiles;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Component
@Profile("development")
public class MyDataForDevelopment implements MyData {
public String profile = "development";
@Value("${message.value}")
public String message;
}
application-development.properties
Fichier de propriétés utilisé dans le profil de développement.
message.value=Hello, development!
Spécifiez le développement dans le paramètre JVM -Dspring.profiles.active.
$ java -Dspring.profiles.active=development -jar target/profiles-0.0.1-SNAPSHOT.jar
Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil de développement sont chargées.
$ curl http://localhost:8080/
{"profile":"development","message":"Hello, development!"}
MyDataForTestAndProduction.java
La classe d'implémentation MyData utilisée dans les profils de test et de production. Le test et la production sont spécifiés dans l'annotation @Profile. Les objets de cette classe sont soumis à DI lorsque l'un des profils spécifiés est spécifié. Le profil JSON renvoyé par @RestController est généré par la méthode getProfile de cette classe. Vous pouvez obtenir plusieurs noms de profil spécifiés par Environment # getActiveProfiles.
package info.maigo.lab.sample.profiles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
@Profile({"test", "production"})
public class MyDataForTestAndProduction implements MyData {
@Autowired
private Environment env;
public String getProfile() {
return String.join(",", env.getActiveProfiles());
}
@Value("${message.value}")
public String message;
}
application-test.properties
Fichier de propriétés utilisé dans le profil de test.
message.value=Hello, test!
application-production.properties
Fichier de propriétés utilisé dans le profil de production.
message.value=Hello, production!
Spécifiez le test pour le paramètre JVM -Dspring.profiles.active.
$ java -Dspring.profiles.active=test -jar target/profiles-0.0.1-SNAPSHOT.jar
Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil de test sont chargées.
$ curl http://localhost:8080/
{"message":"Hello, test!","profile":"test"}
Spécifiez la production dans le paramètre JVM -Dspring.profiles.active.
$ java -Dspring.profiles.active=production -jar target/profiles-0.0.1-SNAPSHOT.jar
Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations du profil de production sont chargées.
$ curl http://localhost:8080/
{"message":"Hello, production!","profile":"production"}
Spécifiez plusieurs profils "test, production" séparés par des virgules dans le paramètre JVM -Dspring.profiles.active.
$ java -Dspring.profiles.active=test,production -jar target/profiles-0.0.1-SNAPSHOT.jar
Lorsque vous accédez au serveur démarré, vous pouvez voir que les informations de profil de test et de production sont lues car la valeur de l'élément de profil contient "test, production".
$ curl http://localhost:8080/
{"message":"Hello, production!","profile":"test,production"}
La valeur de message.value définie dans application-test.properties et application-production.properties est le résultat du conflit. La valeur de application-production.properties est prioritaire (il est considéré que la valeur en conflit ne doit pas être définie). ..
Lorsque j'ai essayé de spécifier "production, test" dans l'ordre inverse de la spécification du profil, la valeur de application-test.properties a été priorisée.
$ java -Dspring.profiles.active=production,test -jar target/profiles-0.0.1-SNAPSHOT.jar
$ curl http://localhost:8080/
{"message":"Hello, test!","profile":"production,test"}
Peut-être que le profil que vous spécifiez plus tard aura la priorité (écraser?).
Recommended Posts