2014-06-23 26 views
7

Tôi đang sử dụng mùa xuân khởi độngLiquibase. Sử dụng url này như hướng dẫnmùa xuân-boot với Liquibase quá tải Sở hữu

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

Trong pom.xml, mục dưới đây có mặt để khởi động mùa xuân biết về liquibase.

<dependency> 
     <groupId>org.liquibase</groupId> 
     <artifactId>liquibase-core</artifactId> 
</dependency> 

và đặt tệp thay đổi trong thư mục tài nguyên. db.changelog-master.xml

Bây giờ khởi động mùa xuân lần đầu tiên để tìm db.changelog-master.yaml trong classpath và ném ngoại lệ như thế này.

Không thể tìm thấy vị trí changelog: lớp đường nguồn [db/changelog/db.changelog-master.yaml

Để khắc phục vấn đề, tôi đã thêm đậu như dưới đây trong lớp học của tôi và cố gắng để thiết lập changelog proprty.

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
public class SampleDataJpaApplication { 


@Autowired 
LiquibaseProperties properties; 
@Autowired 
private DataSource dataSource; 

@Bean 
public SpringLiquibase liquibase() { 
    SpringLiquibase liquibase = new SpringLiquibase(); 
    properties.setChangeLog("classpath:/db/changelog/db.changelog-master.xml"); 
    liquibase.setChangeLog(this.properties.getChangeLog()); 
    liquibase.setContexts(this.properties.getContexts()); 
    liquibase.setDataSource(this.dataSource); 
    liquibase.setDefaultSchema(this.properties.getDefaultSchema()); 
    liquibase.setDropFirst(this.properties.isDropFirst()); 
    liquibase.setShouldRun(this.properties.isEnabled()); 
    return liquibase; 
} 

public static void main(String[] args) throws Exception { 
    Logger logger = LoggerFactory.getLogger("SampleDataJpaApplication"); 
    SpringApplication springApplication = new SpringApplication(); 
    springApplication.run(SampleDataJpaApplication.class, args); 
} 

} 

nhưng không thành công với thông báo.

org.springframework.beans.factory.BeanCreationException: Lỗi tạo đậu với tên 'sampleDataJpaApplication': Tiêm phụ thuộc autowired thất bại; ngoại lệ lồng nhau là org.springframework.beans.factory.BeanCreationException: Không thể trường tự động: org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties sample.data.jpa.SampleDataJpaApplication.properties; lồng nhau ngoại lệ là org.springframework.beans.factory.NoSuchBeanDefinitionException: Không đậu vòng loại [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] tìm thấy cho sự phụ thuộc: dự kiến ​​ít nhất 1 đậu mà đủ điều kiện như ứng cử viên autowire cho sự phụ thuộc này. Phụ thuộc chú thích: {@ org.springframework.beans.factory.annotation.Autowired (bắt buộc = true)}

Nguyên nhân: org.springframework.beans.factory.BeanCreationException: Không thể autowire lĩnh vực: org.springframework .boot.autoconfigure.liquibase.LiquibaseProperties sample.data.jpa.SampleDataJpaApplication.properties; lồng nhau ngoại lệ là org.springframework.beans.factory.NoSuchBeanDefinitionException: Không đậu vòng loại [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] tìm thấy cho sự phụ thuộc: dự kiến ​​ít nhất 1 đậu mà đủ điều kiện như ứng cử viên autowire cho sự phụ thuộc này. Phụ thuộc chú thích: {@ org.springframework.beans.factory.annotation.Autowired (bắt buộc = true)}

Vui lòng cung cấp nguyên liệu đầu vào ở đây, tại sao tôi đang nhận được ngoại lệ này hoặc Có bất kỳ cách nào khác để sẵn ghi đè lên cùng một lớp để tôi có thể thay đổi thuộc tính changeLog của các thuộc tính liquibase.

Trả lời

9

Tôi không hoàn toàn chắc chắn đường dẫn thời gian chính xác cho nhật ký thay đổi của bạn là gì, nhưng tại sao bạn không chỉ sử dụng "liquibase.*" Tài sản trong application.properties? Bạn sẽ có thể bỏ qua Liquibase@Bean và để khởi động làm điều đó cho bạn.

Nếu bạn muốn thêm bạn sở hữu Liquibase@Bean sau đó lấy gợi ý và chắc chắn rằng bạn xác định một bean LiquibaseProperties như tốt (ví dụ: bằng cách khai báo @EnableConfigurationProperties(LiquibaseProperties.class))

+3

Xin chào Dave, Cảm ơn bạn đã thông tin.Tôi đã sử dụng liquibase.changeLog = classpath: /db/changelog/db.changelog-master.xml trong application.properties và nó làm việc cho tôi Nó có nghĩa là, tôi có thể thiết lập giá trị của bất kỳ tài sản nào của bất kỳ bean nào trong đường dẫn lớp của tôi bằng cách đề cập giống nhau trong application.properties? –

Các vấn đề liên quan