Skip to content
This repository was archived by the owner on Oct 24, 2020. It is now read-only.

Commit 6dc3e9c

Browse files
committed
Select the datasource by specified name
1 parent 34947d7 commit 6dc3e9c

File tree

5 files changed

+79
-5
lines changed

5 files changed

+79
-5
lines changed

deployment/src/test/java/org/seasar/doma/quarkus/deployment/ApplicationPropertiesTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public class ApplicationPropertiesTest {
2626
.addClasses()
2727
.add(
2828
new StringAsset(
29-
"quarkus.datasource.db-kind=h2\n"
30-
+ "quarkus.datasource.username=USERNAME-NAMED\n"
31-
+ "quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:testing\n"
32-
+ "quarkus.datasource.jdbc.driver=org.h2.Driver\n"
29+
"quarkus.datasource.sales.db-kind=h2\n"
30+
+ "quarkus.datasource.sales.username=USERNAME-NAMED\n"
31+
+ "quarkus.datasource.sales.jdbc.url=jdbc:h2:tcp://localhost/mem:testing\n"
32+
+ "quarkus.datasource.sales.jdbc.driver=org.h2.Driver\n"
3333
+ "quarkus.doma.dialect=postgres\n"
3434
+ "quarkus.doma.sql-file-repository=no-cache\n"
3535
+ "quarkus.doma.naming=upper-case\n"
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.seasar.doma.quarkus.deployment;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
5+
import static org.junit.jupiter.api.Assertions.assertNotNull;
6+
7+
import io.agroal.api.AgroalDataSource;
8+
import io.quarkus.agroal.DataSource;
9+
import io.quarkus.test.QuarkusUnitTest;
10+
import javax.inject.Inject;
11+
import org.jboss.shrinkwrap.api.ShrinkWrap;
12+
import org.jboss.shrinkwrap.api.asset.StringAsset;
13+
import org.jboss.shrinkwrap.api.spec.JavaArchive;
14+
import org.junit.jupiter.api.Test;
15+
import org.junit.jupiter.api.extension.RegisterExtension;
16+
import org.seasar.doma.jdbc.Config;
17+
18+
public class DataSourceNameTest {
19+
20+
@RegisterExtension
21+
static QuarkusUnitTest runner =
22+
new QuarkusUnitTest()
23+
.setArchiveProducer(
24+
() ->
25+
ShrinkWrap.create(JavaArchive.class)
26+
.add(
27+
new StringAsset(
28+
"quarkus.datasource.db-kind=h2\n"
29+
+ "quarkus.datasource.username=USERNAME-NAMED\n"
30+
+ "quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:testing\n"
31+
+ "quarkus.datasource.jdbc.driver=org.h2.Driver\n"
32+
+ "quarkus.datasource.inventory.db-kind=h2\n"
33+
+ "quarkus.datasource.inventory.username=USERNAME-NAMED\n"
34+
+ "quarkus.datasource.inventory.jdbc.url=jdbc:h2:tcp://localhost/mem:testing\n"
35+
+ "quarkus.datasource.inventory.jdbc.driver=org.h2.Driver\n"
36+
+ "quarkus.doma.datasource-name=inventory\n"),
37+
"application.properties"));
38+
39+
@Inject Config config;
40+
41+
@Inject AgroalDataSource defaultDataSource;
42+
43+
@Inject
44+
@DataSource("inventory")
45+
AgroalDataSource inventoryDataSource;
46+
47+
@Test
48+
void test() {
49+
assertNotNull(config.getDataSource());
50+
assertNotEquals(config.getDataSource(), defaultDataSource);
51+
assertEquals(config.getDataSource(), inventoryDataSource);
52+
}
53+
}

deployment/src/test/java/org/seasar/doma/quarkus/deployment/MultipleConfigTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ Config inventoryConfig(
5757
@Test
5858
void test() {
5959
assertNotNull(defaultConfig);
60+
assertNotNull(defaultConfig.getDataSource());
6061
assertNotNull(inventoryConfig);
62+
assertNotNull(inventoryConfig.getDataSource());
6163
assertNotEquals(defaultConfig, inventoryConfig);
6264
}
6365
}

runtime/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
<groupId>io.quarkus</groupId>
2323
<artifactId>quarkus-arc</artifactId>
2424
</dependency>
25+
<dependency>
26+
<groupId>io.quarkus</groupId>
27+
<artifactId>quarkus-agroal</artifactId>
28+
</dependency>
2529
<dependency>
2630
<groupId>org.seasar.doma</groupId>
2731
<artifactId>doma-core</artifactId>

runtime/src/main/java/org/seasar/doma/quarkus/runtime/DomaProducer.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package org.seasar.doma.quarkus.runtime;
22

33
import io.quarkus.arc.DefaultBean;
4+
import io.quarkus.datasource.common.runtime.DataSourceUtil;
45
import io.quarkus.runtime.Startup;
56
import java.util.Objects;
67
import java.util.Optional;
78
import javax.enterprise.context.ApplicationScoped;
9+
import javax.enterprise.inject.Any;
10+
import javax.enterprise.inject.Default;
11+
import javax.enterprise.inject.Instance;
812
import javax.inject.Singleton;
913
import javax.sql.DataSource;
1014
import org.seasar.doma.jdbc.ClassHelper;
@@ -184,7 +188,7 @@ TransactionManager transactionManager() {
184188
@ApplicationScoped
185189
@DefaultBean
186190
DbConfig dbConfig(
187-
DataSource dataSource,
191+
@Any Instance<DataSource> dataSourceInstance,
188192
Dialect dialect,
189193
SqlFileRepository sqlFileRepository,
190194
ScriptFileLoader scriptFileLoader,
@@ -200,6 +204,8 @@ DbConfig dbConfig(
200204
Commenter commenter,
201205
EntityListenerProvider entityListenerProvider,
202206
TransactionManager transactionManager) {
207+
Objects.requireNonNull(dataSourceName);
208+
DataSource dataSource = selectDataSource(dataSourceInstance, dataSourceName);
203209
return new DbConfig(
204210
dataSource,
205211
dialect,
@@ -224,6 +230,15 @@ DbConfig dbConfig(
224230
queryTimeout);
225231
}
226232

233+
private DataSource selectDataSource(Instance<DataSource> instance, String name) {
234+
if (DataSourceUtil.isDefault(name)) {
235+
return instance.select(Default.Literal.INSTANCE).get();
236+
}
237+
io.quarkus.agroal.DataSource qualifier =
238+
new io.quarkus.agroal.DataSource.DataSourceLiteral(name);
239+
return instance.select(qualifier).get();
240+
}
241+
227242
@ApplicationScoped
228243
@DefaultBean
229244
Entityql entityql(Config config) {

0 commit comments

Comments
 (0)