2017-10-04 9 views
0

J'ai un projet de démarrage par ressort (1.5.4.RELEASE) utilisant java 8 déployé sur AWS HPC. Cette portée d'architecte de projet fonctionne pour Application Web de printemps (Site Web), Repos API Services (développeur mobile) & Administration du compte pour la société. Donc il y a 3 bases de données respectives comme (2-SQL Server & 1-MySQL).Configurer une base de données multiple au démarrage-démarrage avec l'application Web JPA et Hibernate

Ici, lors d'un débordement de pile, je poste ma question pour trouver la meilleure façon de mettre en œuvre ce projet Spring-Boot avec l'aide d'utilisateurs talentueux de débordement de pile.

Voici mes fichiers de propriétés de configuration.

application.properties

#For Public Website 
spring.datasource.clone.web.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver 
spring.datasource.clone.web.url = jdbc:sqlserver://127.0.0.01\\dbo:1433;databaseName=PROD_WEB; 
# Username and password 
spring.datasource.web.username = web 
spring.datasource.web.password = ED5FLW64ZU976Q36 

#For Rest API 
spring.datasource.clone.url = jdbc:mysql://localhost:3306/PROD_REST; 
# Username and password 
spring.datasource.clone.username = rest 
spring.datasource.clone.password = Firewall77# 


#For Account Administration for Company Users 
spring.datasource.admin.url = jdbc:sqlserver://127.0.0.01\\dbo:1433;databaseName=PROD_ADMIN; 
# Username and password 
spring.datasource.admin.username = admin 
spring.datasource.admin.password = Firewall77# 

# Backup & Cron Policy 
... 

J'apprécierais beaucoup pour une très bonne idée de la mettre en œuvre. vos connaissances à ce sujet m'aideraient, merci.

Répondre

1

Vous devez implémenter deux différents beans, un pour chaque source de données et leur faire prendre les propriétés de configuration correspondant respectivement:

  1. Premier bean sera responsable de la première configuration datasource, et doit être défini comme source de données primary avec @Primary, de sorte qu'il c être configuré comme source de données principale pour le projet. Le deuxième bean configurera la deuxième source de données.

Voilà comment ils devraient être mis en œuvre Spring:

@Bean 
@Primary 
@ConfigurationProperties(prefix="spring.datasource.web") 
public DataSource primaryDataSource() { 
    return DataSourceBuilder.create().build(); 
} 

@Bean 
@ConfigurationProperties(prefix="spring.datasource.rest") 
public DataSource secondaryDataSource() { 
    return DataSourceBuilder.create().build(); 
} 

Voici comment devrait être votre application.properties configuré pour prendre ces deux configuration beans en compte:

#For Public Website 
spring.datasource.web.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver 
spring.datasource.web.url = jdbc:sqlserver://127.0.0.01\\dbo:1433;databaseName= PROD_WEB; 
# Username and password 
spring.datasource.web.username = web 
spring.datasource.web.password = ED5FLW64ZU976Q36 

#For Rest API 
spring.datasource.rest.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver 
spring.datasource.rest.url = jdbc:mysql://localhost:3306/PROD_REST; 
# Username and password 
spring.datasource.rest.username = rest 
spring.datasource.rest.password = Firewall77# 

Note:

J'ai changé les propriétés de configuration ici afin qu'ils puissent être différenciés entre web et rest datasources:

  1. Propriétés commençant par spring.datasource.web sera consacrée à configurer la première source de données.
  2. Les propriétés commençant par spring.datasource.rest seront dédiées à la configuration de la deuxième source de données.
+0

Merci @chsdk pour votre soutien, Mais je suis inquiet pour le trafic des utilisateurs (Maintenant, nous testons par Beta testeur créant 1000 à 1500 demandes par seconde, certains de demande de connexion timeout) et Si une de mes bases de données déconnecté dans le pire des cas. Je veux vous confirmer que je suis déjà mis en œuvre de cette façon que vous postez, Aussi nous allons implémenté AWS SQS dans ce projet. Faites-moi savoir s'il existe un autre moyen de soutenir le mieux. –

+0

@SamDev Dans mon cas, nous travaillons avec cette configuration, cela fonctionne parfaitement, nous l'avons utilisé d'une seule source de données et mettez à jour les deux bases de données, donc quand il y a une mise à jour ou un insertio , mais honnêtement, je n'ai pas le cas où l'une des sources de données est déconnectée, mais normalement il n'y aura pas de problème si le primaire est là, en fonction d'un grand nombre de requêtes, il n'aura aucun effet secondaire avec cette configuration. –

+0

Oui, mais une requête bloquée et un délai de lecture de la connexion par un outil de test –