Estou usando o Spring Boot para desenvolver dois aplicativos, um serve como servidor e o outro é um aplicativo cliente. No entanto, ambos são o mesmo aplicativo que funcionam de maneira diferente com base no perfil ativo. Estou usando o recurso de configuração automática do Spring Boot para configurar meus aplicativos.
Eu quero desabilitar toda a configuração automática relacionada ao banco de dados no aplicativo cliente, uma vez que não exigirá conexão com o banco de dados. A aplicação não deve tentar estabelecer conexão com o banco de dados, nem tentar usar qualquer um dos recursos do Spring Data ou Hibernate. A ativação ou desativação da configuração automática do banco de dados deve ser condicional e baseada no perfil ativo do aplicativo.
Posso conseguir isso criando dois arquivos application.properties diferentes para os respectivos perfis?
Tentei adicionar isso ao meu arquivo de propriedades,
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration
Porém, o aplicativo ainda tenta se conectar ao banco de dados na inicialização. Essas exclusões são suficientes para cumprir meu requisito?
Respostas:
A maneira como eu faria algo semelhante é:
Escreva um semelhante para o aplicativo de servidor (sem exclusões).
A última etapa é desativar a configuração automática da classe principal de inicialização de primavera:
Mudar:
@SpringBootApplication
para:Isso deve fazer o trabalho. Agora, as dependências que excluí no exemplo podem estar incompletas. Eles foram suficientes para mim, mas eu não tenho certeza se é tudo para desativar completamente as bibliotecas relacionadas ao banco de dados. Verifique a lista abaixo para ter certeza:
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes
espero que ajude
fonte
@SpringBootApplication
tem umaexclude
propriedade, não há necessidade deClientAppConfiguration
.@SpringBootApplication
e, em seguida, no pacote específico, criaria uma@Configuration
classe que faz uma@Import
das classes relevantes e é dependente de@Profile
ou@Conditional
. Dessa forma, você pode testar cada camada do aplicativo sem que o autoconfig vaze para todo o aplicativo. Quer testar o DB? Basta escanear o pacote de banco de dados, configurar um banco de dados fictício e pronto.Para desativar toda a configuração automática relacionada ao banco de dados e sair de:
1. Usando anotação:
2. Usando Application.properties:
fonte
Parece que você esqueceu a vírgula para separar as classes. Portanto, com base na sua configuração, o seguinte funcionará:
Alternativamente, você também pode defini-lo da seguinte maneira:
fonte
Existe uma maneira de excluir classes específicas de autoconfiguração usando
@SpringBootApplication
anotação.@SpringBootApplication#exclude
attribute é um apelido para@EnableAutoConfiguration#exclude
attribute e acho que é bastante prático e útil.Eu adicionei
@Import(MyPersistenceConfiguration.class)
ao exemplo para demonstrar como você pode aplicar sua configuração de banco de dados personalizada.fonte
A saída para mim foi adicionar
anotação para classe executando Spring boot (marcada com `@SpringBootApplication).
Finalmente, parece:
fonte
Outra forma de controlá-lo por meio de Perfis é esta:
fonte
Tive o mesmo problema aqui, resolvido assim:
Basta adicionar outro em
application-{yourprofile}.yml
que "seu perfil" possa ser "cliente".No meu caso, eu só queria remover o Redis em um perfil Dev, então adicionei um
application-dev.yml
próximo ao principalapplication.yml
e ele fez o trabalho.Neste arquivo eu coloquei:
Gosto do fato de não haver necessidade de alterar o código do aplicativo para fazer isso.
fonte
Eu estava recebendo esse erro mesmo se tivesse feito todas as soluções mencionadas acima.
Em algum momento, quando procuro o POM, havia essa dependência nele
E a classe Pojo teve as seguintes importações
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;
O que mostra claramente que o aplicativo esperava uma fonte de dados.
O que fiz foi remover a dependência JPA do pom e substituir as importações do pojo pelo seguinte uma vez
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
Finalmente consegui construir com SUCESSO. Verifique se você pode ter encontrado o mesmo problema
fonte
Eu adiciono myApp.java, após @SpringBootApplication
E mudou
Então, eu tenho isso na minha classe principal (myApp.java)
}
E trabalhe para mim! =)
fonte