当前位置: 首页 > 知识库问答 >
问题:

装饰Spring启动存储库

微生城
2023-03-14

我正在开发一个Spring BootAPI,该API应该在本月晚些时候部署。我们为存储库创建了自己的界面,并扩展了CrudRepository。Spring开机自动连线一切。

我想做的是添加更多日志记录功能,例如LOGGER. info(“搜索解决方案ID”)

目前,我们的代码如下所示:

@Repository
public interface ProductSolutionRepository extends CrudRepository<ProductSolution, String> {

    public List<ProductSolution> findBySolutionId(@Param("solutionId") int solutionId);

由于Spring配置了所有功能,所以并没有真正看到装饰这些功能以添加日志功能的方法。有人能帮我指出留档,展示一个很好的例子,或者解释日志装饰器背后的概念吗?

共有2个答案

颜祖鹤
2023-03-14

您可以使用单个文件AOP日志方面,使用AspectJ,跨越存储库接口层和日志方法名称、输入参数和输出。

为此,假设有一个存储日志方面(RepositoryLoggingAspect)类,您必须首先用方面(Aspect)对其进行注释:

import org.aspectj.lang.annotation.Aspect;

@Aspect
public class RepositoryLoggingAspect {
//..
}

然后针对您想要剪切的存储库包创建切入点:

@Pointcut("within(package.of.my.repositories..*)")
public void repositoriesPackagePointcut() {}

最后,在带注释的方法中定义日志逻辑:

@Around("repositoriesPackagePointcut()")
public Object logMyRepos(ProceedingJoinPoint joinPoint) throws Throwable {
  //log method name using: joinPoint.getSignature().getName()
  //log method arguments using: Arrays.toString(joinPoint.getArgs())
  //store and log method output using: Object myResult = joinPoint.proceed();
}
穆劲
2023-03-14

首先,我想为大家指出一些冗余代码。

  • 您不需要使用存储库为存储库添加注释,spring boot可以自动连接它

存储库是dao层。通常,您应该为每个存储库创建一个服务,并将存储库自动连接到服务中。然后,您可以在那里实现事务或写入日志。

 类似资料:
  • 我想使用SpringBoot和SpringDataMongoDB开发一个小测试应用程序。因此,在本例中,我使用默认配置(如localhost:27017/test-database),并尝试遵循spring指南(https://spring.io/guides/gs/accessing-data-mongodb/). 我按如下方式启动我的应用程序: DummyClass如下所示: 当project

  • 作为Springboot的新手,我看到了一个例子,我们创建存储库来对给定的Object执行各种操作。这是样品一 所以从其他客户那里,如果我派人杰森 http://localhost:8080/people{....} 它插入到数据库中,在内部调用 save 方法。 在这里,从REST客户端调用后,我想进行一些验证或业务登录,然后插入到数据库,我该怎么做?这意味着我想调用一个服务方法来完成所有的业务

  • 我使用spring-boot-starter-thymeleaf包将Spring Boot Starter父级从1.3.3版升级到当前的2.0.4版。升级后,属性layout:decorator不再起作用。该属性不被解析,而是未被解析地包含在其中,例如。 Spring Boot Starter Parent 2.0.4.Release中是否有更多关于方言的要求?

  • 我运行一个Spring启动1.5.2应用程序。我想将缓存添加到我的服务方法中,我已经添加了Spring引导启动缓存maven依赖,我正在使用@Cacheable注释,但它没有生效,我在@配置类中创建了我的服务bean-这里有一个例子 下面是我的服务方法的一个例子 我的repoistory接口方法如下 每当我从RestController调用此服务方法时,缓存从未被触发,看起来它没有正确设置 我能做

  • 我已经用@Autowired注释为相应的存储库定义了服务类 存储库接口定义为从JpaReepository扩展 应用程序自动编译服务类 运行时,我得到以下错误

  • 本文向大家介绍Design patterns 缓存装饰器,包括了Design patterns 缓存装饰器的使用技巧和注意事项,需要的朋友参考一下 示例 本示例演示如何DbProductRepository使用Decorator模式添加缓存功能。该方法遵循SOLID原则,因为它允许您添加缓存而不会违反单一职责原则或开放/封闭原则。 用法: 调用的结果GetProduct将是:从缓存中检索产品(装饰