Pour connecter le framework RuoYi à une base de données SQL Server en tant que source de données esclave, modifiez la configuration dans le fichier application-druid.yml comme suit :
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
druid:
master:
url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=principale;SelectMethod=cursor;encrypt=false
username: admin
password: secret123
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
slave:
enabled: true
url: jdbc:sqlserver://exemple.com:1433;SelectMethod=Cursor;DatabaseName=secondaire
username: lecteur
password: access456
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
initialSize: 5
minIdle: 10
maxActive: 20
maxWait: 60000
connectTimeout: 30000
socketTimeout: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
maxEvictableIdleTimeMillis: 900000
validationQuery: SELECT 1
Ajustez les paramètres d'URL, d'identifiant et de mot de passe selon votre environnement. La requête de validation est modifiée pour éviter l'utilisation de DUAL, absent dans SQL Server. Si la requête échoue, utilisez une requête valide comme SELECT @@VERSION.
Ensuite, ajoutez la dépendance du pilote JDBC pour SQL Server dans le fichier pom.xml :
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.4.1.jre8</version>
</dependency>
Si cette version pose des problèmes, essayez une autre comme 7.4.1.jre8.
Pour utiliser la source de données esclave dans votre code, appliquez l'annotation @DataSource aux classes ou méthodes appropriées :
@DataSource(value = DataSourceType.SLAVE)
public List<Utilisateur> obtenirUtilisateurs() {
// Logique pour interroger la base de données esclave
return utilisateurMapper.selectList(null);
}
Vérifiez la connectivité réseau en testant le port avec des outils comme telnet ou Test-NetConnection dans PowerShell. Configurez le pare-feu pour autoriser les connexions entrantes si nécessaire.
En alternative, une connxeion JDBC directe peut être utilisée pour le débogage :
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection lien = DriverManager.getConnection(
"jdbc:sqlserver://hote:1433;databaseName=base_donnees", "utilisateur", "mot_passe");
Statement requete = lien.createStatement();
ResultSet donnees = requete.executeQuery("SELECT colonne FROM table_exemple");
while (donnees.next()) {
String valeur = donnees.getString("colonne");
}
lien.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}