- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 FooService
,我希望它仅在 PlatformTransactionManager
可用时可用。
如果我这样定义我的服务并且没有 PlatformTransactionManager
可用,那么我的应用程序将无法启动:
@Service
public class FooService {
public FooService(final PlatformTransactionManager txManager) { ... }
...
}
我想使用 ConditionalOnBean
,它应该只注释自动配置类。我像这样重构了我的代码:
@Configuration
public class FooAutoConfiguration {
@Bean
@ConditionalOnBean(PlatformTransactionManager.class)
public FooService fooService(final PlatformTransactionManager txManager) {
return new FooService(txManager);
}
}
public class FooService {
public FooService(final BarBean bar) { ... }
...
}
我为 FooService
编写了以下测试:
@ExtendWith(SpringExtension.class)
@Import(FooAutoConfiguration.class)
public class FooServiceTest {
@Autowired
private FooService fooService;
@Test
public void test() {
System.out.println("fooService = " + fooService);
}
}
但是当我尝试运行它时出现以下异常:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.acme.FooServiceTest': Unsatisfied dependency expressed through field 'fooService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.acme.FooService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374)
(...)
但是,我知道 PlatformTransactionManager
bean 可用,因为当我在测试中使用 @Autowire
PlatformTransactionManager
时测试运行正常FooService
的。
有趣的是,我还尝试用 WebClient.Builder
替换 PlatformTransactionManager
,最终一切正常。 PlatformTransactionManager
有何特别之处?
我如何编写 FooService
以便它在 PlatformTransactionManager
bean 可用时工作,并且不阻止没有此类 bean 可用的应用程序启动?
最佳答案
添加@AutoConfigureOrder
注释以确保在 Spring Boot 注册事务管理器 bean 之后处理您的自动配置类:
@Configuration
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
public class FooAutoConfiguration {
}
关于java - Spring:如何使服务以 PlatformTransactionManager bean 的可用性为条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54807095/
我正在致力于将 Spring Security OAuth2 与 JWT token 集成到 Spring Boot 项目中。我的身份验证服务器的配置类似于 sample project 中的配置。
我正在实现一个 JDBC 数据库访问 API(基本上是一个包装器),并使用 Spring JdbcTemplate 和 PlatformTransactionManager 来处理事务操作。一切看起来
我希望改造我们现有的事务 API 以使用 Spring 的 PlatformTransactionManager,这样 Spring 将管理我们的事务。我按如下方式链接了我的 DataSource:
我正在使用 wicket 开发一个通用的 CRUD 应用程序,它可以使用 AbstractDao 模式的实现来编辑任何 Spring/JPA 实体,例如 UserDaoImpl 、 ForumDaoI
当尝试在事务之间测试 Hibernate(版本 4)EHCache 的缓存功能时 - 它失败了:无法为测试上下文的@Transactional 测试检索 PlatformTransactionMana
我有一个 FooService,我希望它仅在 PlatformTransactionManager 可用时可用。 如果我这样定义我的服务并且没有 PlatformTransactionManager
我已成功使用 inMemory 功能来创建 HelloWorld Spring OAuth2。现在,我想使用 MySql 而不是 inMemory。以下是我迄今为止尝试过的代码。 当我尝试通过 Pos
我是 Spring 世界的新手。我一直在尝试使用 spring 数据编写一个基本应用程序,使用 Hibernate 和 MYSql 数据库编写 JPA。我看到错误: No matching Platf
通过替换 BASIC auth,我成功地将 OAuth2 集成到我以前的应用程序(REST 服务)中。 然后我得到以下异常: No qualifying bean of type [org.sprin
我正在开发 Spring Boot 应用程序,该应用程序已经在其 applicationContext.xml 文件中建立了数据库连接以及必要的事务管理器和供应商等。 我现在需要将应用程序连接到第二个
我正在使用 2 个 Weblogic 数据源;在我的 XML 配置中,我有 2 个持久性单元、2 个 entityManagerFactories 和 2 个 transactionManagers。
从 JBoss 容器管理的 TransactionManagement 迁移到 Spring 管理的事务管理器 - (死)在插入表时锁定表并且不关闭 txn/session 并且从应用程序跟踪 txn
我使用 Spring Initializer、嵌入式 Tomcat、Thymeleaf 模板引擎生成了一个 Spring Boot Web 应用程序,并将其打包为可执行 JAR 文件。当我以正常模式运
我是一名优秀的程序员,十分优秀!