Como posso configurar e usar duas fontes de dados?
Por exemplo, aqui está o que tenho para a primeira fonte de dados:
application.properties
#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
#second db ...
Classe de aplicação
@SpringBootApplication
public class SampleApplication
{
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
Como faço application.properties
para modificar para adicionar outra fonte de dados? Como faço para usá-lo automaticamente para ser usado por um repositório diferente?
java
spring
spring-boot
spring-mvc
datasource
juventus
fonte
fonte
Atualização 2018-01-07 com Spring Boot 1.5.8.
A maioria das respostas não fornece como usá-las (como fonte de dados em si e como transação), apenas como configurá-las.
Você pode ver o exemplo executável e algumas explicações em https://www.surasint.com/spring-boot-with-multiple-databases-example/
Copiei algum código aqui.
Primeiro você deve definir application.properties como este
Em seguida, defina-os como provedores (@Bean) como este:
Observe que eu tenho @Bean (name = "datasource1") e @Bean (name = "datasource2"), então você pode usá-lo quando precisarmos da fonte de dados como @Qualifier ("datasource1") e @Qualifier ("datasource2"), por exemplo
Se você se importa com a transação, precisa definir o DataSourceTransactionManager para os dois, assim:
Então você pode usá-lo como
ou
Isso deve ser suficiente. Veja exemplo e detalhes no link acima.
fonte
Consulte a documentação oficial
Criar mais de uma fonte de dados funciona da mesma forma que a primeira. Convém marcar um deles como @Primary se você estiver usando a configuração automática padrão para JDBC ou JPA (então esse será escolhido por qualquer injeção do @Autowired).
fonte
Também tive que configurar a conexão com 2 fontes de dados do aplicativo Spring Boot, e não foi fácil - a solução mencionada na documentação do Spring Boot não funcionou. Depois de uma longa pesquisa na internet, eu fiz o trabalho e a idéia principal foi retirada deste artigo e de muitos outros lugares.
A solução a seguir está escrita no Kotlin e funciona com o Spring Boot 2.1.3 e o Hibernate Core 5.3.7 . O principal problema era que não bastava configurar diferentes configurações de DataSource , mas também era necessário configurar o EntityManagerFactory e o TransactionManager para os dois bancos de dados.
Aqui está a configuração do primeiro banco de dados (Primário):
E isso é config para o segundo banco de dados:
As propriedades para fontes de dados são assim:
O problema com as propriedades era que eu tinha que definir o jdbc-url em vez de url porque, caso contrário, eu tinha uma exceção.
ps Você também pode ter diferentes esquemas de nomeação em seus bancos de dados, o que foi o meu caso. Como o Hibernate 5 não suporta todos os esquemas de nomeação anteriores, tive que usar a solução desta resposta - talvez também ajude alguém.
fonte
mapOf("hibernate.physical_naming_strategy" to "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy", "hibernate.implicit_naming_strategy" to "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy" )
Aqui está a solução completa
Como teremos acesso a dois bancos de dados diferentes (db1, db2), precisamos configurar cada configuração de fonte de dados separadamente, como:
Segunda fonte de dados:
Aqui você pode encontrar o exemplo completo no meu blog: Spring Boot with Multiple DataSource Configuration
fonte
fonte
Usei mybatis - springboot 2.0 tech stack, solução:
Nota: 1) @Primary -> @primary
2) ---. "Jdbc-url" nas propriedades -> Após a migração do Spring Boot 2.0: jdbcUrl é necessário com driverClassName
fonte
@ A anotação primária quando usada em um método como o abaixo funciona bem se as duas fontes de dados estiverem no mesmo local / servidor db.
Se as fontes de dados estiverem em servidores diferentes, é melhor usar o @Component junto com o @Primary anotação . O seguinte snippet de código funciona bem em duas fontes de dados diferentes em locais diferentes
fonte
Minha exigência era um pouco diferente, mas usei duas fontes de dados.
Eu usei duas fontes de dados para as mesmas entidades JPA do mesmo pacote. Um para executar DDL na inicialização do servidor para criar / atualizar tabelas e outro para DML em tempo de execução.
A conexão DDL deve ser fechada após a execução das instruções DDL, para impedir o uso adicional de previlégios de superusuário em qualquer lugar do código.
Propriedades
Classes de configuração da fonte de dados
// 1ª classe de configuração da fonte de dados DDL
// 2ª classe Config para fonte de dados DML
// Uso de fontes de dados DDL no código.
// Uso da fonte de dados DML no código.
fonte