2016-07-07 6 views
0

Spring을 사용하여 배치를 개발 중입니다. 쿼리를 수행하려면 JdbcTemplate을 사용하십시오. 내 특정한 경우 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> 

하지만 넣어 해일 어디 정확히 모른다.

이것은 DB 연결 (I 메인 구성 applicationContext.xml 파일로이 파일을 가져올 수)에 대한 정보가 포함되어 내 databaseConfiguration.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> 

을 내 stacktrace에서 수행 된 쿼리를 볼 수 있습니까?

+0

같이해야합니까? – eatSleepCode

+0

'insertTirConsolidatoPolizza'에'@Transaction'을 붙일 필요가 있다고 생각합니다. – eatSleepCode

+0

'org.springframework.jdbc.core.JdbcTemplate' 패키지를 적어도 DEBUG 모드로 설정해야합니다. 이는 로깅 구성 중 어느 것을 사용하든 관계없이 수행됩니다. – Vaelyr

답변

1

JdbcTemplate에서 수행 한 쿼리를 표시하도록 Spring을 구성하는 방법은 무엇입니까?

사용하는 로깅 프레임 워크에 따라 다릅니다. 예를 들어, 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());