2016-07-07 73 views
0

我正在使用Spring開發批處理。要執行查詢,我使用JdbcTemplate如何配置Spring以顯示JdbcTemplate執行的查詢?

在我的具體情況的JdbcTemplate提供給擴展Spring JdbcDaoSupport類的DAO類,所以我有以下DAO:

@Service 
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) 
public class PucManagerColl extends JdbcDaoSupport { 

private static Logger log = Logger.getLogger(PucManagerProd.class); 

    public PucManagerColl() { 
     System.out.println("Costruzione PucManager"); 
    } 

    @Autowired 
    public PucManagerColl(@Qualifier("dataSourcePUCColl") DataSource dataSource) { 
     setDataSource(dataSource); 

    } 

    ............................................................... 
    ............................................................... 

     public void insertTirConsolidatoPolizza(TassoRendimentoInterno tri) { 

     log.debug("PucManagerColl.insertTirConsolidatoPolizza()"); 

     String sql = "INSERT INTO TirConsolidatoPolizza " 
        + "(" 
        + "Polizzaid, " 
        + "PercentualeRendimentoDaInizioGestione, " 
        + "PercentualeRendimentoDaInizioAnno, " 
        + "PercentualeRendimentoDaInizioTrimestre, " 
        + "ControvaloreFinaleBF, " 
        + "DataRiferimentoNav" 
        + ") " 
        + "VALUES (?, ?, ?, ?, ?, ?, ?)"; 


     this.getJdbcTemplate().update(sql, 
        new Object[] { tri.getPolizzaID(), 
           tri.getPercRendimentoInizioSottoscrizione(), 
           tri.getPercRendimentoInizioAnno(), 
           tri.getPercRendimentoInizioTrimestre(), 
           tri.getControvaloreQuote(), 
           tri.getDataRiferimentoNavPUC()}); 


     log.debug("TERMINATO: PucManagerColl.insertTirConsolidatoPolizza()"); 
    } 
} 

正如你可以看到這個類擴展Spring類JdbcDaoSupport並將數據源注入到構造函數中。

的問題是,所述insertTirConsolidatoPolizza()方法不能插入記錄到TirConsolidatoPolizza表。我沒有得到任何錯誤,也沒有任何形式。爲什麼?你在我的查詢中發現了一些問題嗎?

所以我想調試生成的查詢JdbcTemplate並嘗試手動執行到數據庫提示符,但我看不到它。

閱讀這篇文章:Seeing the underlying SQL in the Spring JdbcTemplate?

和官方doumentation:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/jdbc.html

在我看來,我可以配置的JdbcTemplate登錄調試模式或類似的東西查詢。

在其他職位上顯示這個XML片段做到這一點:

<category name="org.springframework.jdbc.core.JdbcTemplate"> 
    <priority value="debug" /> 
</category> 

,但我完全不知道我在哪裏HAE把它。

這是我databaseConfiguration.xml包含了數據庫連接(我將此文件導入主配置文件applicationContext.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" xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd 
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 


    <tx:annotation-driven transaction-manager="tjtJTransactionManager" /> 

    <!-- DB CONNECTIONS: --> 
    <bean id="tjtJTransactionManager" 
     class="org.springframework.jdbc.datasource.DataSourceTransactionManager" 
     scope="singleton"> 
     <property name="dataSource" ref="dataSourcePUC" /> 
    </bean> 

    <!-- PROFILO DI PRODUZIONE --> 
    <beans profile="PROD"> 

     <bean id="dataSourcePUC" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close"> 
      <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" /> 
      <property name="url" value="jdbc:jtds:sqlserver://XXX.myCompany.YYYY.it:1433/DB_1" /> 
      <property name="username" value="username" /> 
      <property name="password" value="pswd" /> 
     </bean> 

    </beans> 

    <!-- PROFILO DI COLLAUDO --> 
    <beans profile="COLL"> 

     <bean id="dataSourcePUC" class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close"> 
      <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" /> 
      <property name="url" value="jdbc:jtds:sqlserver://XXXX.MYCOMPANY.YYYY.it:1433/DB_2" /> 
      <property name="username" value="username" /> 
      <property name="password" value="pswd" /> 

     </bean> 

    </beans> 

</beans> 

如何配置查詢日誌記錄看到我的堆棧跟蹤執行查詢?

+0

您的交易得到承諾? – eatSleepCode

+0

我想你應該用'@ Transactional'註釋'insertTirConsolidatoPolizza'。 – eatSleepCode

+0

您必須將包'org.springframework.jdbc.core.JdbcTemplate'設置爲至少DEBUG模式。這在記錄配置中完成,無論您使用哪種實現。 – Vaelyr

回答

1

如何配置Spring以顯示JdbcTemplate執行的查詢?

它取決於你使用的日誌框架。 例如,對於log4j的你可以把下面幾行中的log4j.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} [%t] %m%n" /> 
    </layout> 
    </appender> 

    <root> 
    <priority value ="warn" /> 
    <appender-ref ref="console"/> 
    </root> 

    <category name="org.springframework.jdbc.core.JdbcTemplate"> 
    <priority value="debug" /> 
    </category> 
</log4j:configuration> 

你必須確保log4j.xml文件是在項目類路徑。 有關詳細的配置說明,請參閱https://logging.apache.org/log4j/2.x/manual/configuration.html

PS:順便說一下,正確的查詢應該像

getJdbcTemplate().update(sql, 
       tri.getPolizzaID(), 
       tri.getPercRendimentoInizioSottoscrizione(), 
       tri.getPercRendimentoInizioAnno(), 
       tri.getPercRendimentoInizioTrimestre(), 
       tri.getControvaloreQuote(), 
       tri.getDataRiferimentoNavPUC()); 
相關問題