2015-06-29 58 views
3

就像在標題。我需要查詢數據庫上的特定函數,它將定義分配給事務的幾個值。如果可能的話,我想讓它成爲與特定配置文件連接的全局配置(有幾個請求我不想加載該功能)。如何在事務打開後立即查詢SQL?

項目建立在Java SE 1.7,Spring Boot 1.1.7上,並與PostgreSQL數據庫連接。

請求建立在3層,SomeClassController(Controller),SomeClassService(Service),SomeClassDB(Repository)上。在SomeClassDB上,它使用來自Spring的JdbcTemplate與數據庫連接並執行CRUD操作。在我想要查詢某個功能的任何操作之前。正如我提到的那樣,我不想要一個能夠完成這項工作的方法 - 我需要像TransactionManager上的全局配置一樣的東西?

也許我應該用beforeCommit方法使用TransactionSynchronization?但我不知道如何在全球範圍內使用它。

EDIT1:我可以,但我不想什麼):

@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) 
@Service 
public class SessionService { 

Boolean flag; 

public SessionService(){ 
    flag=false; 
} 

@Value("${appVersion}") String appVersion; 
@Value("${appArtifactId}") String appArtifactId; 

public void addSession(){ 
    if(!flag){ 
     jdbcTemplate.execute("SELECT add_ses('"+appArtifactId+"','"+appVersion+")"); 
     flag=true; 
    } 
} 

public void deleteSession(){ 

    jdbcTemplate.execute("SELECT del_ses()"); 
    } 
} 

現在我可以叫上開始和第二層類的結束這兩種方法有@Autowired此類。但我真的不想這樣做。有一天,有一天會忘記它傳播第二層SomeClassService類,我想避免它。

我希望能讓你更接近我的問題。

回答

0

這可能是方面的典型用例。你有沒有試圖爲此寫一個方面?可以將Aspect配置爲在特定包或特定註釋修飾的方法中調用方法之前和之後執行一些代碼。 Spring對方面有很好的支持。

另一種方法是創建一個代理(使用java.lang.reflect.Proxy)對象,它將調用您的初始化代碼,然後委託給代理對象。

相關問題