spring 指南

spring 指南

spring data JDBC :

JDBC 是连接数据库操作的原生接口,是对数据库操作的统一接口,定义的是对数据库操作的规范,由具体的数据库厂家实现,如:Mysql,Oracle 等;

spring data JDBC相比传统JDBC而言省去了,数据库驱动,连接等无关配置,只需要写sql,设置参数;

spring data JPA:

JPA 是持久化规范,是orm框架(对象关系映射框架)的标准,JPA的具体实现是由ORM框架实现,如:Hibernate等,
ORM框架底层都是通过封装JDBC来实现CRUD功能的;

spring data jpa是对jpa规范的再次抽象,底层还是用的实现jpa的hibernate技术。

spring data JPA 和spring data JDBC的区别:就上面的分析来看JPA和JDBC分属于两个不同的层次,JPA属于应用程序和JDBC之间的一个中间层,对二者起到连接作用,而且.spring data JPA 可以做到不写sql语句,只需要设置参数。

打印 SQL 。生产环境,建议关闭

format_sql: true #格式化SQL,如果不加,SQL输出不换行,不方便查看

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

Hibernate 配置内容,对应 HibernateProperties 类

spring.jpa.hibernate.ddl-auto=none

我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@394e2710]
JDBC Connection [com.taosdata.jdbc.rs.RestfulConnection@1876127b] will be managed by Spring

@Transactional
经过长时间的探索,最终发现控制台报这个错的原因是:service实现类方法上未加@transactional 注解,从而导致地未同步注册。

com.alibaba druid-spring-boot-starter 1.1.10 com.alibaba druid 1.1.10

file [D:\ws\gitee\springboot-tdengine-demo\target\classes\com\taosdata\example\springboot\tdengine\demo\dao\WeatherMapper.class] required a single bean, but 2 were found:
- mysqlSqlSessionFactroy: defined by method 'mysqlSqlSessionFactroy' in class path resource [com/taosdata/example/springboot/tdengine/demo/config/MySQLConfig.class]
- taosSqlSessionFactroy: defined by method 'taosSqlSessionFactroy' in class path resource [com/taosdata/example/springboot/tdengine/demo/config/TaosConfig.class]

Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'weatherMapper' for bean class [com.taosdata.example.springboot.tdengine.demo.dao.WeatherMapper] conflicts with existing, non-compatible bean definition of same name and class [org.mybatis.spring.mapper.MapperFactoryBean]
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.checkCandidate

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.datasource.druid.initialSize' in value "${spring.datasource.druid.initialSize}"

访问http://ip:port/spring-demo-api/druid/login.html

登录帐号:admin

登录密码:admin

@Transactional(transactionManager="db2TransactionManager")

4.0.0

<groupId>com.cw.demo</groupId>
<artifactId>springboot-tdengine-demo</artifactId>
<version>1.0-SNAPSHOT</version>

https://blog.csdn.net/LiZhen314/article/details/120495143

/**

  • 1、首先要知道spring的aop切面的原理是什么?
  • 答:Spring是采用动态代理(AOP)实现对bean的管理和切片,它为我们的每个class生成一个代理对象。
  • 只有在代理对象之间进行调用时,可以触发切面逻辑,也就是切面才可以切进去,才能执行切面里编写的代码。
  • 而在同一个class中,方法B调用方法A,调用的是原对象的方法,而不通过代理对象。所以Spring无法切到这次调用。
  • 2、所以想必你大致也明白了为什么在同一个类里面一个方法调用另外一个带有@Async的方法不起作用了?
  • 不仅仅是这个,同一个类里面一个方法调用另外一个开启事物(@Transactional)的的方法,事物也是不起作用的。
  • 3、自定义的注解在同一个类里面方法调用也是不起作用的,总的来说同一个类里面总的来说只要是同一个类里面的方法间调用,
  • 那么切面都是无效的,aop都无法切入进入。
  • 4、解决办法用AopContext.currentProxy()获取一个代理类,然后用代理类再去调用就好了 代码示例:
    */
    二、@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)解决同类方法调用时异步和事务不生效:

我们在开启springboot启动类上添加@EnableAsync,从而启动异步注解@Async

启动之后,我们可以在需要异步执行的方法上面添加@Async注解,即可实现异步,但是有一点,如果我们需要用同一个类中的方法调用另一个加了@Async注解的方法,这时@Async不起作用,原因和事务注解@Transactional失效的原因一样,没有用到代理类导致,这时我们可以通过在启动类添加@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)来解决问题。

该注解两个参数作用分别为:

一个是控制aop的具体实现方式,为true的话使用cglib,为false的话使用java的Proxy,默认为false。
第二个参数控制代理的暴露方式,解决内部调用不能使用代理的场景,默认为false。

添加 @MapperScan 注解,cn.iocoder.springboot.lab17.dynamicdatasource.mapper 包路径下,就是我们 Mapper 接口所在的包路径。
添加 @EnableAspectJAutoProxy 注解,重点是配置 exposeProxy = true ,因为我们希望 Spring AOP 能将当前代理对象设置到 AopContext 中。具体用途,我们会在下文看到。想要提前看的胖友,可以看看 《Spring AOP 通过获取代理对象实现事务切换》 文章。

https://www.iocoder.cn/Spring-Boot/dynamic-datasource/
https://www.cnblogs.com/rsx524/articles/15168511.html

posted @ 2022-12-02 18:15  三里清风18  阅读(55)  评论(0编辑  收藏  举报