【发布时间】:2015-09-15 13:49:29
【问题描述】:
就像标题一样。我需要查询数据库上的特定函数,该函数将定义分配给事务的一些值。如果可能的话,我想让它成为与特定配置文件连接的全局配置(我不想加载该功能的请求很少)。
项目基于 Java SE 1.7、Spring Boot 1.1.7 构建,并与 PostgreSQL 数据库连接。
请求建立在 3 层之上,SomeClassController(Controller)、SomeClassService(Service)、SomeClassDB(Repository)。在 SomeClassDB 上,它使用 Spring 中的 JdbcTemplate 与数据库连接并执行 CRUD 操作。在任何这些操作之前,我想查询一个函数。正如我所提到的,我不想要一个可以完成这项工作的方法 - 我需要在 TransactionManager 上进行全局配置?
也许我应该将 TransactionSynchronization 与 beforeCommit 方法一起使用?但我不知道如何在全球范围内使用它。
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 类,我想避免它。
我希望这会让你更接近我的问题。
【问题讨论】:
标签: java spring postgresql transactions spring-boot