Merge branch '2.1.x'

Closes gh-17767
pull/17774/head
Stephane Nicoll 5 years ago
commit 45915d085e

@ -53,32 +53,18 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
* @author Vince Bickers
* @author Stephane Nicoll
* @author Kazuki Shimizu
* @author Michael Simons
* @since 1.4.0
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ SessionFactory.class, Neo4jTransactionManager.class, PlatformTransactionManager.class })
@ConditionalOnMissingBean(SessionFactory.class)
@EnableConfigurationProperties(Neo4jProperties.class)
@Import(Neo4jBookmarkManagementConfiguration.class)
public class Neo4jDataAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public org.neo4j.ogm.config.Configuration configuration(Neo4jProperties properties) {
return properties.createConfiguration();
}
@Bean
public SessionFactory sessionFactory(org.neo4j.ogm.config.Configuration configuration,
ApplicationContext applicationContext, ObjectProvider<EventListener> eventListeners) {
SessionFactory sessionFactory = new SessionFactory(configuration, getPackagesToScan(applicationContext));
eventListeners.stream().forEach(sessionFactory::register);
return sessionFactory;
}
@Bean
@ConditionalOnMissingBean(PlatformTransactionManager.class)
public Neo4jTransactionManager transactionManager(SessionFactory sessionFactory, Neo4jProperties properties,
public Neo4jTransactionManager transactionManager(SessionFactory sessionFactory,
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
return customize(new Neo4jTransactionManager(sessionFactory), transactionManagerCustomizers.getIfAvailable());
}
@ -91,12 +77,32 @@ public class Neo4jDataAutoConfiguration {
return transactionManager;
}
private String[] getPackagesToScan(ApplicationContext applicationContext) {
List<String> packages = EntityScanPackages.get(applicationContext).getPackageNames();
if (packages.isEmpty() && AutoConfigurationPackages.has(applicationContext)) {
packages = AutoConfigurationPackages.get(applicationContext);
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(SessionFactory.class)
protected static class Neo4jOgmSessionFactoryConfiguration {
@Bean
@ConditionalOnMissingBean
public org.neo4j.ogm.config.Configuration configuration(Neo4jProperties properties) {
return properties.createConfiguration();
}
@Bean
public SessionFactory sessionFactory(org.neo4j.ogm.config.Configuration configuration,
ApplicationContext applicationContext, ObjectProvider<EventListener> eventListeners) {
SessionFactory sessionFactory = new SessionFactory(configuration, getPackagesToScan(applicationContext));
eventListeners.stream().forEach(sessionFactory::register);
return sessionFactory;
}
return StringUtils.toStringArray(packages);
private String[] getPackagesToScan(ApplicationContext applicationContext) {
List<String> packages = EntityScanPackages.get(applicationContext).getPackageNames();
if (packages.isEmpty() && AutoConfigurationPackages.has(applicationContext)) {
packages = AutoConfigurationPackages.get(applicationContext);
}
return StringUtils.toStringArray(packages);
}
}
@Configuration(proxyBeanMethods = false)

@ -99,6 +99,16 @@ class Neo4jDataAutoConfigurationTests {
});
}
@Test
void customSessionFactoryShouldNotDisableOtherDefaults() {
this.contextRunner.withUserConfiguration(CustomSessionFactory.class).run((context) -> {
assertThat(context).hasSingleBean(SessionFactory.class);
assertThat(context.getBean(SessionFactory.class)).isSameAs(context.getBean("customSessionFactory"));
assertThat(context).hasSingleBean(Neo4jTransactionManager.class);
assertThat(context).hasSingleBean(OpenSessionInViewInterceptor.class);
});
}
@Test
void customConfiguration() {
this.contextRunner.withUserConfiguration(CustomConfiguration.class).run((context) -> {

@ -4667,9 +4667,9 @@ properties, as shown in the following example:
spring.data.neo4j.password=secret
----
You can take full control over the session creation by adding a
`org.neo4j.ogm.config.Configuration` `@Bean`. Also, adding a `@Bean` of type
`SessionFactory` disables the auto-configuration and gives you full control.
You can take full control over the session creation by either adding a
`org.neo4j.ogm.config.Configuration` bean or a `org.neo4j.ogm.session.SessionFactory`
bean.

Loading…
Cancel
Save