현재 활성 데이터Spring Boot에서 소스 참조 가져오기
다음을 통해 db data init을 구현하고 싶다.DataSourceInitializer.
Spring Boot 메인 메서드 바로 아래에 있는 메서드입니다만, 전혀 실행되지 않는 것 같습니다(실행을 확인할 수 있는 에러를 일으키기 위해서 문자를 의도적으로 삭제하려고 했습니다).아무 일도 일어나지 않았다.)
@ConfigurationProperties(prefix="spring.datasource")
@Bean
public DataSource getDataSource() {
// i was hoping this was going to pull my current datasource, as
// defined in application.properties
return DataSourceBuilder
.create()
.build();
}
@Bean
public DataSourceInitializer dataSourceInitializer() {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(new ClassPathResource("/data/init/initData.sql"));
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
// the call to the above method
dataSourceInitializer.setDataSource(getDataSource());
dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
return dataSourceInitializer;
}
업데이트: 이 질문은 사용 중인 dataSource에 대한 참조를 얻기 위한 것입니다.이 질문에서는 데이터를 초기화하는 방법을 매우 간단하게 설명합니다.Data Source Initializer는 Spring boot 1.2에서는 동작하지 않습니다.
데이터 소스가 이미 생성된 경우 스프링 컨테이너에 있으므로 다음과 같이 하십시오.
@Autowired
DataSource dataSource;
해야죠.
즉, 어플리케이션의 메인 메서드 아래에 이러한 메서드가 있으며 데이터 소스에 자동 접속하지 않기 때문에 인스턴스를 직접 생성하여 속성을 사용하지 않도록 합니다.스프링에서 만든 싱글톤 객체를 사용해야 합니다.그러기 위해서는 다음 두 가지 방법이 있습니다.
첫 번째 옵션과 사용해야 할 옵션은 Config 클래스를 선언하여 콩을 작성하는 것입니다.
@Configuration
public class DatasourceConfig
{
@ConfigurationProperties(prefix="spring.datasource")
@Bean
public DataSource getDataSource() {
// i was hoping this was going to pull my current datasource, as
// defined in application.properties
return DataSourceBuilder
.create()
.build();
}
@Bean
public DataSourceInitializer dataSourceInitializer() {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(new ClassPathResource("/data/init/initData.sql"));
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
// the call to the above method
dataSourceInitializer.setDataSource(getDataSource());
dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
return dataSourceInitializer;
}
}
사용.@ConfigurationConfiguration 클래스는 시작 시 에 의해 서브클래스가 되기 때문에 직접 메서드를 호출할 수도 있습니다.CGLIB봄에서 만든 오브젝트를 얻을 수 있습니다.
Java 기반 구성이 내부적으로 작동하는 방법에 대한 자세한 정보
두 번째 옵션은 두 번째 방법으로 데이터 소스를 자동 배선하는 것입니다.
@Bean
@Autowired
public DataSourceInitializer dataSourceInitializer(DataSource myDatasource) {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(new ClassPathResource("/data/init/initData.sql"));
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(myDatasource);
dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
return dataSourceInitializer;
}
언급URL : https://stackoverflow.com/questions/43142703/get-a-reference-to-currently-active-datasource-in-spring-boot
'programing' 카테고리의 다른 글
| 타이프 스크립트의 소품으로 useState 전달 (0) | 2023.03.26 |
|---|---|
| 유형 스크립트로 반응에서 참조를 사용하는 방법 (0) | 2023.03.26 |
| Ajax에서 Asynchronous는 무엇을 의미합니까? (0) | 2023.03.21 |
| 전자를 사용하여 폴더 경로를 얻는 방법 (0) | 2023.03.21 |
| Wordpress Post에서 HTML 코드를 코멘트 아웃할 수 있습니까? (0) | 2023.03.21 |