使用多个数据源 (Micronaut) javax.persistence.TransactionRequiredException
Using multiple data sources (Micronaut) javax.persistence.TransactionRequiredException
我正在尝试使用 micronaut (1.2.0) 的多个数据库连接,没有注入方法对我有用这是我的配置:
application.yml
datasources:
default:
url: ${JDBC_URL:`jdbc:mysql://localhost/cossine?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC`}
username: ${JDBC_USER:******}
password: ${JDBC_PASSWORD:*****}
driverClassName: ${JDBC_DRIVER:com.mysql.cj.jdbc.Driver}
keycloak:
url: ${JDBC_KYC_URL:`jdbc:mysql://localhost/keycloak?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC`}
username: ${JDBC_KYC_USER:******}
password: ${JDBC_KYC_PASSWORD:*******}
driverClassName: ${JDBC_DRIVER:com.mysql.cj.jdbc.Driver}
jpa:
default:
packages-to-scan:
- 'com.acmain.domain'
properties:
hibernate:
hbm2ddl:
auto: none
show_sql: false
keycloak:
packages-to-scan:
- 'com.acmain.kdomain'
properties:
hibernate:
hbm2ddl:
auto: none
show_sql: true
当我使用默认配置时,它没有问题,但是当像这样使用第二个配置时:
private final EntityManager entityManager;
public UserEntityImpl(@CurrentSession(value = "keycloak") EntityManager em) {
this.entityManager = em;
}
@Override
@Transactional
public UsersResponse findAll(@NotNull SortingAndOrderArguments args) {
List<UserEntity> users;
StringBuilder qlString = new StringBuilder("SELECT g FROM UserEntity as g");
...........................
一个我得到以下错误:
Hibernate: select count(userentity0_.id) as col_0_0_ from user_entity userentity0_
Hibernate: select userentity0_.id as id1_0_, userentity0_.email as email2_0_, userentity0_.enabled as enabled3_0_, userentity0_.first_name as first_na4_0_, userentity0_.last_name as last_nam5_0_, userentity0_.realm_id as realm_id6_0_ from user_entity userentity0_ order by userentity0_.email asc limit ?
14:10:59.822 [RxCachedThreadScheduler-1] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: no transaction is in progress
javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:398)
at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3617)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1473)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1469)
at org.springframework.orm.hibernate5.SessionFactoryUtils.flush(SessionFactoryUtils.java:147)
at org.springframework.orm.hibernate5.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:95)
at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:96)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:922)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:730)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:714)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:534)
at io.micronaut.spring.tx.annotation.TransactionInterceptor.intercept(TransactionInterceptor.java:88)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at io.micronaut.validation.ValidatingInterceptor.intercept(ValidatingInterceptor.java:157)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at com.acmain.repository.$UserEntityImplDefinition$Intercepted.findAll(Unknown Source)
at com.acmain.service.UserService.getAllUsers(UserService.java:181)
at com.acmain.controller.UserController.getUsers(UserController.java:48)
at com.acmain.controller.$UserControllerDefinition$Intercepted.$$access2(Unknown Source)
at com.acmain.controller.$UserControllerDefinition$Intercepted$$proxy2.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:144)
at io.micronaut.aop.chain.InterceptorChain.lambda$new(InterceptorChain.java:93)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at io.micronaut.validation.ValidatingInterceptor.intercept(ValidatingInterceptor.java:157)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at com.acmain.controller.$UserControllerDefinition$Intercepted.getUsers(Unknown Source)
at com.acmain.controller.$$UserControllerDefinition$InterceptedDefinition$$exec3.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:144)
at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:2792)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:294)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter(RoutingInBoundHandler.java:1408)
at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableSwitchIfEmpty.subscribeActual(FlowableSwitchIfEmpty.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14868)
at io.micronaut.http.context.ServerRequestTracingPublisher.lambda$subscribe[=13=](ServerRequestTracingPublisher.java:52)
at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:52)
at io.micronaut.http.context.ServerRequestTracingPublisher.subscribe(ServerRequestTracingPublisher.java:52)
at io.reactivex.internal.operators.flowable.FlowableFromPublisher.subscribeActual(FlowableFromPublisher.java:29)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableSwitchMap.subscribeActual(FlowableSwitchMap.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.reactivex.internal.operators.flowable.FlowableSwitchMap$SwitchMapSubscriber.onNext(FlowableSwitchMap.java:129)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.lambda$onNext[=13=](InstrumentedSubscriber.java:80)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.onNext(InstrumentedSubscriber.java:84)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.onNext(FlowableSubscribeOn.java:97)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.lambda$onNext[=13=](InstrumentedSubscriber.java:80)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.onNext(InstrumentedSubscriber.java:84)
at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:132)
at io.reactivex.internal.operators.flowable.FlowableFromCallable.subscribeActual(FlowableFromCallable.java:50)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedCallableFlowable.subscribeActual(RxInstrumentedCallableFlowable.java:65)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
我错过了什么?
也试过
@PersistenceContext(name = "keycloak")
private final EntityManager entityManager;
好吧,只需添加
@Transactional("keycloak")
方法
这里没有记载https://micronaut-projects.github.io/micronaut-sql/latest/guide/#hibernate
但在这里找到了用途
如果有人在这里寻找如何在不使用 Hibernate 的情况下执行此操作,那么应该这样做。
@Transactional
@TransactionalAdvice("my-datasource") // if you have more than one datasource
public Thing saveThing(Thing thing) {
repo.save(thing);
}
Micronaut docs 对此很清楚:
In a multiple datasource scenario, the @Repository and
@TransactionalAdvice annotations can be used to specify the datasource
configuration to use. By default Micronaut Data will look for the
default datasource.
For example:
@Repository("inventoryDataSource")
@JdbcRepository(dialect = Dialect.ORACLE)
@TransactionalAdvice("inventoryDataSource")
public interface PhoneRepository extends CrudRepository<Phone, Integer> {
Optional<Phone> findByAssetId(@NotNull Integer assetId);
}
我正在尝试使用 micronaut (1.2.0) 的多个数据库连接,没有注入方法对我有用这是我的配置:
application.yml
datasources:
default:
url: ${JDBC_URL:`jdbc:mysql://localhost/cossine?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC`}
username: ${JDBC_USER:******}
password: ${JDBC_PASSWORD:*****}
driverClassName: ${JDBC_DRIVER:com.mysql.cj.jdbc.Driver}
keycloak:
url: ${JDBC_KYC_URL:`jdbc:mysql://localhost/keycloak?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC`}
username: ${JDBC_KYC_USER:******}
password: ${JDBC_KYC_PASSWORD:*******}
driverClassName: ${JDBC_DRIVER:com.mysql.cj.jdbc.Driver}
jpa:
default:
packages-to-scan:
- 'com.acmain.domain'
properties:
hibernate:
hbm2ddl:
auto: none
show_sql: false
keycloak:
packages-to-scan:
- 'com.acmain.kdomain'
properties:
hibernate:
hbm2ddl:
auto: none
show_sql: true
当我使用默认配置时,它没有问题,但是当像这样使用第二个配置时:
private final EntityManager entityManager;
public UserEntityImpl(@CurrentSession(value = "keycloak") EntityManager em) {
this.entityManager = em;
}
@Override
@Transactional
public UsersResponse findAll(@NotNull SortingAndOrderArguments args) {
List<UserEntity> users;
StringBuilder qlString = new StringBuilder("SELECT g FROM UserEntity as g");
...........................
一个我得到以下错误:
Hibernate: select count(userentity0_.id) as col_0_0_ from user_entity userentity0_
Hibernate: select userentity0_.id as id1_0_, userentity0_.email as email2_0_, userentity0_.enabled as enabled3_0_, userentity0_.first_name as first_na4_0_, userentity0_.last_name as last_nam5_0_, userentity0_.realm_id as realm_id6_0_ from user_entity userentity0_ order by userentity0_.email asc limit ?
14:10:59.822 [RxCachedThreadScheduler-1] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: no transaction is in progress
javax.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:398)
at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3617)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1473)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1469)
at org.springframework.orm.hibernate5.SessionFactoryUtils.flush(SessionFactoryUtils.java:147)
at org.springframework.orm.hibernate5.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:95)
at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:96)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:922)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:730)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:714)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:534)
at io.micronaut.spring.tx.annotation.TransactionInterceptor.intercept(TransactionInterceptor.java:88)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at io.micronaut.validation.ValidatingInterceptor.intercept(ValidatingInterceptor.java:157)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at com.acmain.repository.$UserEntityImplDefinition$Intercepted.findAll(Unknown Source)
at com.acmain.service.UserService.getAllUsers(UserService.java:181)
at com.acmain.controller.UserController.getUsers(UserController.java:48)
at com.acmain.controller.$UserControllerDefinition$Intercepted.$$access2(Unknown Source)
at com.acmain.controller.$UserControllerDefinition$Intercepted$$proxy2.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:144)
at io.micronaut.aop.chain.InterceptorChain.lambda$new(InterceptorChain.java:93)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at io.micronaut.validation.ValidatingInterceptor.intercept(ValidatingInterceptor.java:157)
at io.micronaut.aop.MethodInterceptor.intercept(MethodInterceptor.java:40)
at io.micronaut.aop.chain.InterceptorChain.proceed(InterceptorChain.java:150)
at com.acmain.controller.$UserControllerDefinition$Intercepted.getUsers(Unknown Source)
at com.acmain.controller.$$UserControllerDefinition$InterceptedDefinition$$exec3.invokeInternal(Unknown Source)
at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:144)
at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:2792)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:294)
at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:122)
at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter(RoutingInBoundHandler.java:1408)
at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:71)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableSwitchIfEmpty.subscribeActual(FlowableSwitchIfEmpty.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14868)
at io.micronaut.http.context.ServerRequestTracingPublisher.lambda$subscribe[=13=](ServerRequestTracingPublisher.java:52)
at io.micronaut.http.context.ServerRequestContext.with(ServerRequestContext.java:52)
at io.micronaut.http.context.ServerRequestTracingPublisher.subscribe(ServerRequestTracingPublisher.java:52)
at io.reactivex.internal.operators.flowable.FlowableFromPublisher.subscribeActual(FlowableFromPublisher.java:29)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.internal.operators.flowable.FlowableSwitchMap.subscribeActual(FlowableSwitchMap.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedFlowable.subscribeActual(RxInstrumentedFlowable.java:68)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.reactivex.internal.operators.flowable.FlowableSwitchMap$SwitchMapSubscriber.onNext(FlowableSwitchMap.java:129)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.lambda$onNext[=13=](InstrumentedSubscriber.java:80)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.onNext(InstrumentedSubscriber.java:84)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.onNext(FlowableSubscribeOn.java:97)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.lambda$onNext[=13=](InstrumentedSubscriber.java:80)
at io.micronaut.reactive.rxjava2.InstrumentedSubscriber.onNext(InstrumentedSubscriber.java:84)
at io.reactivex.internal.subscriptions.DeferredScalarSubscription.complete(DeferredScalarSubscription.java:132)
at io.reactivex.internal.operators.flowable.FlowableFromCallable.subscribeActual(FlowableFromCallable.java:50)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.micronaut.reactive.rxjava2.RxInstrumentedCallableFlowable.subscribeActual(RxInstrumentedCallableFlowable.java:65)
at io.reactivex.Flowable.subscribe(Flowable.java:14918)
at io.reactivex.Flowable.subscribe(Flowable.java:14865)
at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
我错过了什么?
也试过
@PersistenceContext(name = "keycloak")
private final EntityManager entityManager;
好吧,只需添加
@Transactional("keycloak")
方法
这里没有记载https://micronaut-projects.github.io/micronaut-sql/latest/guide/#hibernate
但在这里找到了用途
如果有人在这里寻找如何在不使用 Hibernate 的情况下执行此操作,那么应该这样做。
@Transactional
@TransactionalAdvice("my-datasource") // if you have more than one datasource
public Thing saveThing(Thing thing) {
repo.save(thing);
}
Micronaut docs 对此很清楚:
In a multiple datasource scenario, the @Repository and @TransactionalAdvice annotations can be used to specify the datasource configuration to use. By default Micronaut Data will look for the default datasource.
For example:
@Repository("inventoryDataSource") @JdbcRepository(dialect = Dialect.ORACLE) @TransactionalAdvice("inventoryDataSource") public interface PhoneRepository extends CrudRepository<Phone, Integer> { Optional<Phone> findByAssetId(@NotNull Integer assetId); }