configurer la source de données pour liquibase au printemps de démarrage
J'ai un ressort de démarrage de l'application et je veux ajouter liquibase modification de la configuration du journal.
J'ai créé un LiquibaseConfig classe pour la configuration liquibase:
@Configuration
public class LiquibaseConfiguration {
@Value("${com.foo.bar.liquibase.changelog}")
private String changelog;
@Autowired
MysqlDataSource dataSource;
@Bean
public SpringLiquibase liquibase() {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog(changelog);
return liquibase;
}
}
et j'ai configuré les informations de source de données dans le fichier de propriétés:
spring.datasource.url=jdbc:mysql://localhost:3306/dms
spring.datasource.username=root
spring.datasource.password=test
spring.datasource.testWhileIdle = true
spring.jpa.show-sql = true
#liquibase
com.foo.bar.liquibase.changelog=classpath:/db/changelog/db.changelog.xml
quand je lance mon application, je reçois cette erreur:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'liquibaseConfiguration': Unsatisfied dependency expressed through field 'dataSource': No qualifying bean of type [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] found for dependency [com.mysql.jdbc.jdbc2.optional.MysqlDataSource]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] found for dependency [com.mysql.jdbc.jdbc2.optional.MysqlDataSource]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Maintenant j'ai compris que cela signifie que l'application ne peut pas autowire la MysqlDataSource dataSource;
mais j'ai besoin de passer de la source de données à liquibase bean. Comment puis-je le faire?
OriginalL'auteur Muhammad Ramahy | 2017-01-05
Vous devez vous connecter pour publier un commentaire.
Voici une simple étape vers l'intégration liquibase au printemps de démarrage
ÉTAPE 1
Ajouter liquibase dépendance
Gradle
Maven
ÉTAPE 2
Ajouter liquibase changelog chemin d'accès au fichier dans
application.yml
Avis de propriété
liquibase.change-log.
je fais allusion chemin/liquibase/db-changelog.xml.
vous devriez donc avoir un nom de fichierdb-changelog.xml
à l'intérieur desrc/main/resources/liquibase/
ÉTAPE 3
Ajoutez vos modifications sur le fichier et quand le Printemps-Démarrage de l'application est démarrée (
spring-boot:run
) votre ensemble de modifications seront chargés.Cela permettra d'utiliser la valeur par défaut
dataSource
que votre application utilise.Plus D'Infos: http://docs.spring.io/spring-boot/docs/1.4.3.RELEASE/reference/htmlsingle/#howto-execute-liquibase-database-migrations-on-startup
Mise à jour
Pour le Printemps Boot 2.0 @veben souligné dans le commentaire
Remarquez qu'avec Spring boot 2, les propriétés n'est pas plus "liquibase.change-log", mais de "printemps".liquibase.change-log"
OriginalL'auteur Aman Tuladhar
J'ai eu un semblable de construire pour ma demande, avez-vous essayé d'injecter une plus générique javax.sql.Source de données à la place?
Ma conjecture est que le Printemps utilise le non-spécifique de type pour ce bean, sur le dessus de cela, vous ne devriez même pas utiliser une base de données spécifique au type si votre demande peut être configuré pour utiliser une autre source, c'est à dire par simple changement de la source de données d'URL dans le fichier de configuration.
OriginalL'auteur DoNuT