2 个配置文件、2 个方法实现、1 个通过 Thymeleaf 在 html 文件中调用。如何?

2 profiles, 2 method implementations, 1 call in html file via Thymeleaf. How?

我的应用程序中只有 1 个使用特定 class 及其方法的实现。我添加了另一个实现并打开了配置文件。添加第二个配置文件让我分别为每个配置文件实现 class,因为存在一些差异。

问题是,在更改之前,我通过 html 文件中的 Thymeleaf 调用了特定方法,如下所示:

<td class="text-center" id="hashrate" th:text="${@findAndDisplayDataService.formatHashrate(networkHashrate.hashrate)}">Sample hashrate</td>

现在 class 的名称已更改为: FindAndDisplayDataServiceQuartzFindAndDisplayDataServiceSpringScheduler 根据配置文件。我无法再调用 html 文件中的方法。我已经用接口 FindAndDisplayDataService 包装了两个 classes,但我真的无法在 Thymeleaf 中调用接口方法。

您可以创建一个 UIService 作为委托,在其中注入您的 FindAndDisplayDataService 接口。这样您就可以调用具体的 bean 引用。

使 FindAndDisplayDataServiceQuartzFindAndDisplayDataServiceSpringScheduler 实现一个通用的 interface,可能具有相同的 bean 限定符,这样您就可以自动装配而不必担心 bean 名称。像下面这样的东西就可以了。

定义一个公共接口。

    public interface FindAndDisplayDataService {
       void formatHashrate(String hashrate);
    }

创建扩展公共接口的配置文件特定 bean 定义。

   @Component("findAndDisplayDataService")
   @Profile("quartz")
   public FindAndDisplayDataServiceQuartz implements FindAndDisplayDataService {
      public void formatHashrate(String hashrate){
        //do stuff based on quartz
      }
   }

   @Component("findAndDisplayDataService")
   @Profile("spring-scheduler")
   public FindAndDisplayDataServiceSpringScheduler implements FindAndDisplayDataService {
      public void formatHashrate(String hashrate){
        //do stuff based on Spring scheduler
      }
   }

并且在您的 thymeleaf 模板中,您可以根据 @Component 名称 findAndDisplayDataService.

注入任何 bean