Spring Profiles fornecem uma maneira poderosa de segregar partes da configuração do seu aplicativo e torná-lo disponível apenas em determinados ambientes. Este recurso é especialmente útil para lidar com diferentes configurações para ambientes de desenvolvimento, teste e produção sem alterar seu código.
Spring Profiles permitem registrar beans condicionalmente, dependendo do perfil ativo. Isso significa que você pode definir vários beans do mesmo tipo e especificar qual deles deve estar ativo em um determinado ambiente.
Spring Boot usa um conjunto de arquivos application-{profile}.properties ou application-{profile}.yml para configuração. Esses arquivos contêm configurações específicas do perfil e são carregados com base no perfil ativo.
spring: application: name: MySpringApp server: port: 8080 # Default port
spring: datasource: url: jdbc:h2:mem:devdb username: sa password: "" driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: update show-sql: true server: port: 8081 # Development port
spring: datasource: url: jdbc:mysql://prod-db-server:3306/proddb username: prod_user password: prod_password driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: validate show-sql: false server: port: 8082 # Production port
Você pode ativar um perfil usando o parâmetro --spring.profiles.active ao executar seu aplicativo Spring Boot:
java -jar my-spring-app.jar --spring.profiles.active=dev
Como alternativa, você pode especificar o perfil ativo em seu arquivo application.yml:
spring: profiles: active: dev # or prod
Você também pode definir o perfil ativo usando uma variável de ambiente:
export SPRING_PROFILES_ACTIVE=dev
Spring fornece uma anotação @Profile para registrar beans condicionalmente com base no perfil ativo. Aqui está um exemplo:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration public class AppConfig { @Bean @Profile("dev") public DataSource devDataSource() { return new HikariDataSource(); // Development-specific DataSource } @Bean @Profile("prod") public DataSource prodDataSource() { return new HikariDataSource(); // Production-specific DataSource } }
Neste exemplo, o bean devDataSource só será criado quando o perfil dev estiver ativo, e o bean prodDataSource será criado quando o perfil prod estiver ativo.
Ao escrever testes, você pode especificar quais perfis devem estar ativos usando a anotação @ActiveProfiles:
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; @SpringBootTest @ActiveProfiles("dev") public class DevProfileTests { @Autowired private DataSource dataSource; @Test public void testDataSource() { // Test code using the development DataSource } }
Às vezes, você pode querer carregar arquivos de propriedades diferentes com base no perfil ativo. Você pode usar a anotação @PropertySource para conseguir isso:
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @PropertySource("classpath:application-${spring.profiles.active}.properties") public class PropertyConfig { }
Spring Profiles são uma maneira robusta e flexível de gerenciar diferentes configurações para vários ambientes. Ao segregar suas propriedades de configuração e beans com base em perfis, você pode garantir que seu aplicativo se comporte corretamente em cada ambiente, seja ele de desenvolvimento, teste ou produção. Usando as técnicas descritas neste artigo, você pode configurar e gerenciar facilmente perfis em seu aplicativo Spring Boot.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3