GVKun编程网logo

Spring boot Data @Transactional 在调用 MSSQL 存储过程时不起作用(springboot调用数据库)

3

此处将为大家介绍关于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调用数据库)

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 数据扩展

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.
}
View Code

要使用 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" />
View Code

基本的 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";
  }
}
View Code

  正如你所看到的,该方法直接接收一个用户实例,不需要进一步查找。通过让 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";
  }
}
View Code

  此方法签名将导致 Spring MVC 尝试使用以下默认配置从请求参数派生 Pageable 实例:

表 1. 对 Pageable 实例评估的请求参数

page

您想要检索的页面,索引为 0,默认为 0。

size

要检索的页面大小,默认为 20。

sort

属性应该按格式属性 property(,ASC | DESC)排序。默认排序方向是升序。如果您想切换路线,请使用多个排序参数,例如 ?sort=firstname&sort=lastname,asc.

更多 spring 扩展以及支持 web 支持请查看

 

Gradle,Spring Boot,spring-boot-starter-data-jpa升级

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

我不明白注释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 扩展

lnmp 环境里安装 mssql 及 mssql 的 php 扩展

小活中用到 mssql, 于是在自己 lnmp 环境中安装各 mssql 数据库

步骤如下: 

源码编译安装

(1)下载 freetds-stable-0.91 源码: http://download.csdn.net/download/xhu_eternalcc/7457555(花了 4 积分,没有积分的找我要,微信 zmd1047773569)
          上传到根目录下的 download 文件中
(2)编译安装:
   # cd /download

           # 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 扩展等更多相关知识的信息可以在本站进行查询。

本文标签: