Skip to content

Commit b10f172

Browse files
committed
Supports for Multiple Data Sources
This feature was removed when migrating to AutoConfiguration, See #5 Closes gh-64
1 parent fda8227 commit b10f172

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

grace-plugin/src/main/groovy/grails/plugin/hibernate/HibernateGormAutoConfiguration.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.beans.Introspector;
1919
import java.util.Collections;
2020
import java.util.HashSet;
21+
import java.util.Map;
2122
import java.util.Set;
2223

2324
import javax.sql.DataSource;
@@ -27,6 +28,7 @@
2728
import org.springframework.boot.autoconfigure.AutoConfiguration;
2829
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
2930
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
31+
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
3032
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3133
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3234
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -37,6 +39,8 @@
3739
import org.springframework.context.ApplicationContext;
3840
import org.springframework.context.ConfigurableApplicationContext;
3941
import org.springframework.context.annotation.Bean;
42+
import org.springframework.context.annotation.Conditional;
43+
import org.springframework.context.annotation.Primary;
4044
import org.springframework.core.annotation.Order;
4145
import org.springframework.transaction.PlatformTransactionManager;
4246

@@ -48,10 +52,14 @@
4852
import org.grails.core.artefact.DomainClassArtefactHandler;
4953
import org.grails.datastore.gorm.events.ConfigurableApplicationContextEventPublisher;
5054
import org.grails.datastore.gorm.proxy.ProxyHandlerAdapter;
55+
import org.grails.datastore.mapping.config.Settings;
56+
import org.grails.datastore.mapping.core.connections.AbstractConnectionSources;
57+
import org.grails.datastore.mapping.core.connections.ConnectionSource;
5158
import org.grails.datastore.mapping.model.MappingContext;
5259
import org.grails.datastore.mapping.services.Service;
5360
import org.grails.orm.hibernate.HibernateDatastore;
5461
import org.grails.orm.hibernate.proxy.HibernateProxyHandler;
62+
import org.grails.orm.hibernate.support.HibernateDatastoreConnectionSourcesRegistrar;
5563
import org.grails.plugin.hibernate.support.AggregatePersistenceContextInterceptor;
5664
import org.grails.plugin.hibernate.support.GrailsOpenSessionInViewInterceptor;
5765
import org.grails.transaction.ChainedTransactionManagerPostProcessor;
@@ -81,6 +89,7 @@ public HibernateGormAutoConfiguration(ApplicationContext applicationContext,
8189
}
8290

8391
@Bean
92+
@Primary
8493
@ConditionalOnMissingBean
8594
public HibernateDatastore hibernateDatastore(ObjectProvider<DataSource> dataSource) {
8695
GrailsClass[] grailsClasses = this.grailsApplication.getObject().getArtefacts(DomainClassArtefactHandler.TYPE);
@@ -140,18 +149,21 @@ public HibernateDatastore hibernateDatastore(ObjectProvider<DataSource> dataSour
140149
}
141150

142151
@Bean
152+
@Primary
143153
@ConditionalOnMissingBean
144154
public SessionFactory sessionFactory(HibernateDatastore hibernateDatastore) {
145155
return hibernateDatastore.getSessionFactory();
146156
}
147157

148158
@Bean
159+
@Primary
149160
@ConditionalOnMissingBean
150161
public MappingContext grailsDomainClassMappingContext(HibernateDatastore hibernateDatastore) {
151162
return hibernateDatastore.getMappingContext();
152163
}
153164

154165
@Bean
166+
@Primary
155167
@ConditionalOnMissingBean
156168
public PlatformTransactionManager transactionManager(HibernateDatastore hibernateDatastore) {
157169
return hibernateDatastore.getTransactionManager();
@@ -194,4 +206,48 @@ public ChainedTransactionManagerPostProcessor chainedTransactionManagerPostProce
194206
return new ChainedTransactionManagerPostProcessor(config, whitelistPattern, blacklistPattern);
195207
}
196208

209+
@Bean
210+
@Conditional(GrailsDataSourceCondition.class)
211+
public static HibernateDatastoreConnectionSourcesRegistrar hibernateDatastoreConnectionSourcesRegistrar(ObjectProvider<GrailsApplication> grailsApplication) {
212+
Iterable<String> dataSourceNames = getConfigureDataSources(grailsApplication.getObject().getConfig());
213+
return new HibernateDatastoreConnectionSourcesRegistrar(dataSourceNames);
214+
}
215+
216+
private static Set<String> getConfigureDataSources(Config config) {
217+
Set<String> dataSourceNames = new HashSet<>();
218+
if (config == null) {
219+
dataSourceNames = Set.of(ConnectionSource.DEFAULT);
220+
}
221+
else {
222+
Map dataSources = config.getProperty(Settings.SETTING_DATASOURCES, Map.class, Collections.emptyMap());
223+
224+
if (dataSources != null && !dataSources.isEmpty()) {
225+
dataSourceNames.addAll(AbstractConnectionSources.toValidConnectionSourceNames(dataSources));
226+
}
227+
Map dataSource = config.getProperty(Settings.SETTING_DATASOURCE, Map.class, Collections.emptyMap());
228+
if (dataSource != null && !dataSource.isEmpty()) {
229+
dataSourceNames.add(ConnectionSource.DEFAULT);
230+
}
231+
}
232+
return dataSourceNames;
233+
}
234+
235+
static final class GrailsDataSourceCondition extends AnyNestedCondition {
236+
237+
GrailsDataSourceCondition() {
238+
super(ConfigurationPhase.REGISTER_BEAN);
239+
}
240+
241+
@ConditionalOnProperty(name = "dataSource")
242+
private static final class DataSourceUrlCondition {
243+
244+
}
245+
246+
@ConditionalOnProperty(name = "dataSources")
247+
private static final class DataSourcesCondition {
248+
249+
}
250+
251+
}
252+
197253
}

0 commit comments

Comments
 (0)