2016-01-14 1 views
5

Я новичок в Spring-Batch (и Spring в целом) и выполняю следующую документацию, чтобы научить себя, что мне нужно для выполнения этой задачи. Я пытаюсь подключиться к базе данных DB2.Я получаю DataSource не поддерживается при использовании DataSouceBuilder

Если я объявляю соединение DB2 с XML, как это:

<bean id="wcs_dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" /> 
    <property name="url" value="jdbc:db2://127.0.0.1/DEV" /> 
    <property name="username" value="user" /> 
    <property name="password" value="pass5" /> 
</bean> 

Затем загрузить его в свой код, как так:

@Bean 
    public JdbcCursorItemReader<Product> databaseItemReader() {    
     ApplicationContext context = 
       new ClassPathXmlApplicationContext("context-datasource.xml"); 
     DataSource dataSource = (DataSource) context.getBean("wcs_dataSource"); 
     ((ConfigurableApplicationContext)context).close(); 

     JdbcCursorItemReader<Product> result = new JdbcCursorItemReader<Product>(); 
     result.setDataSource(dataSource); 
     result.setSql(sqlString); 
     result.setRowMapper(new ProductRowMapper()); 
     return result; 
    } 

Он прекрасно работает. Как я когда-либо хотел бы использовать DataSourceBuilder как примеры показывают, так в конечном счете, я хотел бы, чтобы добраться до:

@ConfigurationProperties(prefix="DEV.datasource") 
public DataSource Wcs_DataSource(){ 
    return DataSourceBuilder.create().build(); 
} 

Но по какой-то причине, что не работает. Я получаю

вызвано следующими причинами: java.lang.IllegalStateException: Нет Поддерживаемый тип DataSource найден

Я также попытался:

public DriverManagerDataSource dataSource() {    
    DataSourceBuilder DSBuilder = DataSourceBuilder.create(); 
    DSBuilder.url("jdbc:db2://127.0.0.1/DEV"); 
    DSBuilder.username("user"); 
    DSBuilder.password("password"); 
    DSBuilder.driverClassName("com.ibm.db2.jcc.DB2Driver"); 
    DriverManagerDataSource result = (DriverManagerDataSource) DSBuilder.build(); 
    return result;  
} 

И я получаю ту же ошибку. Если я запустил его в отладчике, я вижу, что ошибка происходит в .build().

Уверен, что мне не хватает чего-то легкого, но я не могу понять это.

+4

Прежде всего, '' '' 'возвращает' DataSource', и это должен быть тип, который вы возвращаете, не отсылайте его к 'DriverManagerDataSource', так как это приведет к сбою. Для использования 'DataSourceBuilder' вам нужно иметь' commons-dbcp', или 'tomcat-jdbc' или' hikaricp' на вашем пути к классам, иначе это не сработает. У меня нет одного из них, которое вы получите, когда получите сообщение. Другое дело, вам действительно нужно собственное пространство имен ('DEV.datasource'), почему бы просто не использовать значение по умолчанию? –

+0

Пространство имен будет потому, что будет больше одного источника данных. Это следующая документация: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html Я пробовал это без с DriverManagerDataSource с теми же результатами. Был еще один способ, которым я смотрел, что это использовало. Поэтому я попробовал (схватил за соломинку к этому моменту), но это не помогло. Я удалил его с момента публикации. НО добавление commons-dbcp к моим зависимостям действительно сработало! Благодаря! – VydorScope

ответ

10

M. Deinum ответил на это. Мне не хватало commons-dbcp из моих зависимостей! Я подумал, что так легко.

Для использования DataSourceBuilder вам нужно иметь Викисклада ДБХП или TOMCAT- или JDBC hikaricp на вашем пути к классам иначе это не будет работать. У вас нет ни одного из них, вы получите сообщение по мере поступления.

Смежные вопросы