此处将为大家介绍关于SpringbootData@Transactional在调用MSSQL存储过程时不起作用的详细内容,并且为您解答有关springboot调用数据库的相关问题,此外,我们还将为您介
此处将为大家介绍关于Spring boot Data @Transactional 在调用 MSSQL 存储过程时不起作用的详细内容,并且为您解答有关springboot调用数据库的相关问题,此外,我们还将为您介绍关于005-spring-data-elasticsearch 3.0.0.0 使用【三】-spring-data 之 Spring 数据扩展、Gradle,Spring Boot,spring-boot-starter-data-jpa升级、javax.transaction.Transactional 与 org.springframework.transaction.annotation.Transactional、lnmp 环境里安装 mssql 及 mssql 的 php 扩展的有用信息。
本文目录一览:- Spring boot Data @Transactional 在调用 MSSQL 存储过程时不起作用(springboot调用数据库)
- 005-spring-data-elasticsearch 3.0.0.0 使用【三】-spring-data 之 Spring 数据扩展
- Gradle,Spring Boot,spring-boot-starter-data-jpa升级
- javax.transaction.Transactional 与 org.springframework.transaction.annotation.Transactional
- lnmp 环境里安装 mssql 及 mssql 的 php 扩展
Spring boot Data @Transactional 在调用 MSSQL 存储过程时不起作用(springboot调用数据库)
如何解决Spring boot Data @Transactional 在调用 MSSQL 存储过程时不起作用
我在尝试从代码中调用存储过程时遇到了一些问题(不确定它是否有帮助,但基本上是一些选择和插入)。
这是我目前所拥有的:
@Component
@EnableTransactionManagement
public class Inserter {
@Transactional(propagation = Propagation.required)
public void saveAndCommit(Mapper mapper) {
saveAll(...)
...
softDeletes(mapper,this.containerRepository);
}
private <T,N> void saveAll(JpaRepository<T,N> repository,List<T> entityList) {
if (entityList != null && !entityList.isEmpty()) {
repository.saveAll(entityList);
}
}
private void softDeletes(Mapper mapper,ContainerRepository containerRepository) {
...
}
}
我在 softDeletes 中有一些这样的存储过程调用:
@Modifying
@Query(value = "EXEC SP_Soft_Deletes ''...'',''...'',:state_container_id,:parent_id,:transaction_id,:last_modification",nativeQuery = true)
void generateSoftDeletes(
@Param("...") String ...,@Param("...") String ...,@Param("last_modification") LocalDateTime last_modification
);
调用 softDeletes 时,出现以下异常:
Executing an update/delete query; nested exception is javax.persistence.TransactionrequiredException: Executing an update/delete query
显然,saveAndCommit 并没有为所有这些方法创建一个事务,但我不确定为什么。有什么想法吗?
谢谢!
005-spring-data-elasticsearch 3.0.0.0 使用【三】-spring-data 之 Spring 数据扩展
续
1.8、Spring 数据扩展
这些扩展使 Spring Data 在各种环境下的使用成为可能。目前大部分的整合都是针对 Spring MVC。
1.8.1、Querydsl 扩展
Querydsl 是一个框架,它可以通过流畅的 API 构建静态类型的 SQL 查询。
几个 Spring Data 模块通过 QueryDslPredicateExecutor 提供与 Querydsl 的集成。
示例、QueryDslPredicateExecutor 接口
public interface QueryDslPredicateExecutor<T> {
//查找并返回与Predicate匹配的单个实体
Optional<T> findById(Predicate predicate);
//查找并返回与谓词匹配的所有实体
Iterable<T> findAll(Predicate predicate);
//返回匹配Predicate的实体的数量
long count(Predicate predicate);
//判断返回与Predicate匹配的实体是否存在
boolean exists(Predicate predicate);
// … more functionality omitted.
}
要使用 Querydsl 支持,只需在存储库接口上扩展 QueryDslPredicateExecutor 即可。
interface UserRepository extends CrudRepository<User, Long>, QueryDslPredicateExecutor<User> {
}
以上使用 Querydsl 谓词可以编写类型安全查询。
Predicate predicate = user.firstname.equalsIgnoreCase("dave").and(user.lastname.startsWithIgnoreCase("mathews"));
userRepository.findAll(predicate);
1.8.2、web 支持
如果模块支持存储库编程模型,则 Spring Data 模块附带各种 Web 支持。与 Web 相关的东西需要类路径上的 Spring MVC JAR,其中一些甚至提供了与 Spring HATEOAS 的集成。通常,通过在 JavaConfig 配置类中使用 @EnableSpringDataWebSupport 注释来启用集成支持。
启用 web 支持
@Configuration
@EnableWebMvc
@EnableSpringDataWebSupport
class WebConfiguration {}
或者 xml 配置
<bean class="org.springframework.data.web.config.SpringDataWebConfiguration" />
<!-- If you''re using Spring HATEOAS as well register this one *instead* of the former -->
<bean class="org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration" />
基本的 web 支持
上面显示的配置设置将注册一些基本组件:
DomainClassConverter 使 Spring MVC 能够根据请求参数或路径变量来解析存储库管理的域类的实例。
HandlerMethodArgumentResolver 实现,以便 Spring MVC 根据请求参数解析 Pageable 和 Sort 实例。
DomainClassConverter
DomainClassConverter 允许您直接在 Spring MVC 控制器方法签名中使用域类型,因此您不必通过存储库手动查找实例:
@Controller
@RequestMapping("/users")
class UserController {
@RequestMapping("/{id}")
String showUserForm(@PathVariable("id") User user, Model model) {
model.addAttribute("user", user);
return "userForm";
}
}
正如你所看到的,该方法直接接收一个用户实例,不需要进一步查找。通过让 Spring MVC 首先将路径变量转换为域类的 id 类型并最终通过在为域类型注册的存储库实例上调用 findById(...)来访问实例,可以解决该实例。
目前,存储库必须实施 CrudRepository 才有资格被发现用于转换。
HandlerMethodArgumentResolvers for Pageable and Sort
上面的配置片段还注册了 PageableHandlerMethodArgumentResolver 以及 SortHandlerMethodArgumentResolver 的一个实例。注册使页面和排序成为有效的控制器方法参数
@Controller
@RequestMapping("/users")
class UserController {
private final UserRepository repository;
UserController(UserRepository repository) {
this.repository = repository;
}
@RequestMapping
String showUsers(Model model, Pageable pageable) {
model.addAttribute("users", repository.findAll(pageable));
return "users";
}
}
此方法签名将导致 Spring MVC 尝试使用以下默认配置从请求参数派生 Pageable 实例:
表 1. 对 Pageable 实例评估的请求参数
|
您想要检索的页面,索引为 0,默认为 0。 |
|
要检索的页面大小,默认为 20。 |
|
属性应该按格式属性 property(,ASC | DESC)排序。默认排序方向是升序。如果您想切换路线,请使用多个排序参数,例如 |
更多 spring 扩展以及支持 web 支持请查看
Gradle,Spring Boot,spring-boot-starter-data-jpa升级
如何解决Gradle,Spring Boot,spring-boot-starter-data-jpa升级
我正在使用Spring Boot 1.5.7.RELEASE版本,并希望将以下代码用于某些分页操作,例如
Pageable pageable = PageRequest.of(0,1,org.springframework.data.domain.sort.by(Sort.Direction.ASC,"seatNumber"));
但是,我的org.springframework.data.domain.sort
版本没有by
方法。当我更新具有Sort
类(spring-data-commons
)的单个JAR时,编译错误消失了,但是我遇到了一堆其他错误。
所以我尝试做这样的事情
compile ''org.springframework.boot:spring-boot-starter-data-jpa:2.3.4.RELEASE''
希望可以更“全面”地升级所有Spring Data,但这似乎无济于事(仍然有spring-data-commons
的旧版本)。 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa/2.3.4.RELEASE
我假设通过“指向”它也将升级所有依赖项,但是我仍然使用hibernate 5.0,而不是(根据Maven存储库链接hibernate 5.4)。总之,如果可能的话,我想只用一个简单的衬纸就可以升级春季数据,或者至少要明白为什么我提到的方法行不通。
解决方法
从Spring Boot版本1.5.7.RELEASE
升级到版本2.3.4.RELEASE
非常冒险。
您应该逐步升级小块。该问题将很容易诊断。
javax.transaction.Transactional 与 org.springframework.transaction.annotation.Transactional
我不明白注释javax.transaction.Transactional
和注释之间的实际区别是什么org.springframework.transaction.annotation.Transactional
?
是org.springframework.transaction.annotation.Transactional
扩展javax.transaction.Transactional
还是它们具有完全不同的含义?什么时候应该使用它们?@Transactinal
服务层中的Spring和DAO中的
javax ?
谢谢回答。
答案1
小编典典几年前,Spring 已经定义了自己的 Transactional 注释以使 Spring bean 方法具有事务性。
Java EE 7 终于做了同样的事情,现在除了 EJB 方法之外,还允许 CDI bean 方法是事务性的。所以从 Java EE 7
开始,它也定义了自己的 Transactional 注解(它显然不能重用 Spring 的注解)。
在 Java EE 7 应用程序中,您将使用 Java EE 注释。
在 Spring 应用程序中,您将使用 Spring 注释。
它们的用途是相同的:通知容器(Java EE 或 Spring)一个方法是事务性的。
lnmp 环境里安装 mssql 及 mssql 的 php 扩展
小活中用到 mssql, 于是在自己 lnmp 环境中安装各 mssql 数据库
步骤如下:
源码编译安装
# tar zxvf freetds-stable.tgz(解压,)
# cd freetds-0.91
# 编译
# ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib
# make
# make install
参数解释:
安装 freetds 到目录 /usr/local/freetds:--prefix=/usr/local/freetds
支持 MSSQL2000:--with-tdsver=8.0 --enable-msdblib
配置 FreeTds 的库文件
将 freetds 的库文件所在路径配置到 LD_LIBRARY_PATH 参数中:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/localfreetds/lib/:
或者直接把 etc/bashrc 的文件 bashrc 直接填写上 LD_LIBRARY_PATH=/usr/localfreetds/lib:$LD_LIBRARY_PATH
这么作的目的是为了避免加载 FreeTds 库文件加载不上的情况。
php 里安装 php-mssql 扩展:
cd /download (把php-mssql扩展下载到download目录里)
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz (下载扩展文件,这里要根据你环境中运行的php版本选择对应的扩展版本下载,我这里php是5.6.30的 所以php-mssql扩展下载对应的版本)
tar -zxvf php-5.6.30.tar.gz
cd /php-5.6.30/ext/mssql
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds/
make && make install
编译安装后的结果 如下图
同时 mssql.so 也在 php 扩展文件下生成 (如下图)
把 extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/mssql.so" 添加到 usr/local/php/lib/php.ini 中
引用扩展后,重启 web 服务,通过 phpinfo 查看扩展 mssql 是否开启成功
重启 php /usr/local/php/sbin/php-fpm reload
重启 nginx 进入 nginx 可执行目录 sbin 下,输入命令./nginx -s reload 即可(或者 /application/nginx/sbin/nginx -s reload)
今天关于Spring boot Data @Transactional 在调用 MSSQL 存储过程时不起作用和springboot调用数据库的介绍到此结束,谢谢您的阅读,有关005-spring-data-elasticsearch 3.0.0.0 使用【三】-spring-data 之 Spring 数据扩展、Gradle,Spring Boot,spring-boot-starter-data-jpa升级、javax.transaction.Transactional 与 org.springframework.transaction.annotation.Transactional、lnmp 环境里安装 mssql 及 mssql 的 php 扩展等更多相关知识的信息可以在本站进行查询。
本文标签: