Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 事务打开后如何查询SQL?_Java_Spring_Postgresql_Transactions_Spring Boot - Fatal编程技术网

Java 事务打开后如何查询SQL?

Java 事务打开后如何查询SQL?,java,spring,postgresql,transactions,spring-boot,Java,Spring,Postgresql,Transactions,Spring Boot,就像在标题中一样。我需要查询数据库上的一个特定函数,该函数将定义分配给事务的几个值。如果可能的话,我想让它成为一个与特定概要文件连接的全局配置(我不想加载该函数的请求很少) 该项目基于JavaSE1.7、SpringBoot1.1.7构建,并与PostgreSQL数据库连接 请求构建在3层上,SomeClassController(控制器)、SomeClassService(服务)、SomeClassDB(存储库)。在SomeClassDB上,它使用Spring中的JdbcTemplate与数据

就像在标题中一样。我需要查询数据库上的一个特定函数,该函数将定义分配给事务的几个值。如果可能的话,我想让它成为一个与特定概要文件连接的全局配置(我不想加载该函数的请求很少)

该项目基于JavaSE1.7、SpringBoot1.1.7构建,并与PostgreSQL数据库连接

请求构建在3层上,SomeClassController(控制器)、SomeClassService(服务)、SomeClassDB(存储库)。在SomeClassDB上,它使用Spring中的JdbcTemplate与数据库连接,并执行CRUD操作。在这些操作之前,我想查询一个函数。正如我所提到的,我不想要一个可以完成这项工作的方法——我需要TransactionManager上的全局配置之类的东西

也许我应该使用TransactionSynchronization和beforeCommit方法?但我不知道如何在全球范围内使用它

EDIT1:我能做但我不想做的;):

现在我可以用@Autowired这个类在第二层类的开始和结束调用这两个方法。但我真的不想那样做。有人,总有一天会忘记它传播第二层SomeClassService类,我想避免它


我希望这将使您更接近我的问题。

这可能是方面的典型用例。你有没有试着为这个写一个方面?方面可以配置为在调用特定包中的方法或由特定注释修饰的方法之前和之后执行一些代码。Spring对方面有很好的支持

另一种方法是创建一个代理(使用java.lang.reflect.proxy)对象,该对象将调用初始化代码,然后委托给代理对象

@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()");
    }
}