2016-10-30 12 views
0

STSを使用して新しいSpring Starter Projectを作成しました。 POMファイルでSpringでDataSourceをapplication.propertiesの代わりにXMLで設定する方法はありますか?

私が追加しました:

<dependency> 
    <groupId>org.postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jdbc</artifactId> 
</dependency> 

次に私が作成したbeans.xmlファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id="databaseService" class="com.pckg.DatabaseService"> 
     <property name="dataSource" ref="dataSource"/> 
    </bean> 

    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"> 
     <property name="driverClassName" value="org.postgresql.Driver"/> 
     <property name="username"   value="postgres"/> 
     <property name="password"   value="password"/> 
     <property name="url"    value="jdbc:postgresql://localhost:5432/postgres"/> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="dataSource"/> 
     <qualifier value="transactionManager" /> 
    </bean> 
</beans> 

とは、私はほとんど空のweb.xmlファイルにaddded

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/beans.xml</param-value> 
</context-param> 

私のDatabaseServiceクラスは次のようになります。

import org.apache.tomcat.jdbc.pool.DataSource; 
... 
@Service("databaseService") 
@Transactional 
public class DatabaseService { 
    private NamedParameterJdbcTemplate jdbcTemplate; 

    @Autowired 
    public void setDataSource(DataSource dataSource) { 
    if (jdbcTemplate == null) 
     jdbcTemplate = new NamedParameterJdbcTemplate(dataSource); 
    } 

    public DatabaseService(DataSource dataSource){ 
    this.setDataSource(dataSource); 
    } 

    public DatabaseService(){  
    } 

    public String getData(){ 
     //jdbcTemplate.query("SELECT 1",.....); 
     return null; 
    } 
} 

この設定を有効にしたいと思います。何らかの理由でそれらの豆は見られず、私はこのアプリケーションを起動できません。 私は例外持っている:

nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.tomcat.jdbc.pool.DataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. 

をしてapplication.properties私はbeans.xmlファイルに含めるspring.datasource.driver-class-name=...エントリや他のエントリが含まれていないためです

私が入力し、そのデータとアプリケーションが起動beans.xmlで提供される他の情報は無視され、このBeanのどれも '実行されていない'と私は信じています。私は、トランザクションマネージャが私のSQLクエリに参加し、現在は不可能です。

+0

なぜXMLを使用し、 'application.properties'を使用しないのですか?私は普通の使用では不可能なことは何も見ていないのですか? –

+0

application.properties内のデータから作成されたDataSourceには、すべての設定がありませんでした。そのデータを持つBeanを自分で作成したいのですが、@Configurationアノテーションを使用してJavaクラスのBeanを作成しました。 – Kamil

答えて

0

最初の質問:なぜあなたはspring-bootを使用している間にXMLファイルを作成していますか?さ

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jdbc</artifactId> 
    <version>4.3.3.RELEASE</version> 
</dependency> 

とそのTomcatの-JDBCをチェック:単に依存関係を置き換えます:

削除:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jdbc</artifactId> 
</dependency> 

はアドオンあなたはそれを使用すると、自分で自分のコンテナをブートストラップすることを意図していない場合あなたのクラスパスで:

<dependency> 
    <groupId>org.apache.tomcat</groupId> 
    <artifactId>tomcat-jdbc</artifactId> 
    <version>8.5.6</version> 
</dependency> 

それ以外の場合は、スプリングブート関連のe xception the documentation suggestsをapplication.propertiesに追加する spring.datasource.continue-on-error=false#データベースの初期化中にエラーが発生した場合は、停止しないでください。

しかし、私はすべてがうまくいくことを保証することはできません。安全な側にするためには、プロジェクトからの春ブート関連の依存関係を削除し、単純な春を続けるか、Springベースの構成を無視して、本当に素敵なデフォルトでコンテナをブートストラップしてください。

+0

spring boot私はXMLの代わりに@Configurationアノテーションを使ってJavaを使ってBeanを作成しました。あなたの答えは私には春のブートと一緒にXMLを使うことができなかったので、それを受け入れるべきだと私は指摘しました – Kamil

+1

'@ ImportResource'を使ってxmlを使うことができます。しかし、独自のBeanを作成する必要はありません。少なくとも、フレームワークを適切に使用する場合は必要ありません。したがって、フレームワークをハッキングする代わりに、適切に使用してください。 –

関連する問題