Merge pull request #17662 from michael-simons

* pr/17662:
  Polish "Refine back-off strategy of Neo4j SessionFactory"
  Refine back-off strategy of Neo4j SessionFactory

Closes gh-17662
pull/17807/head
Stephane Nicoll 5 years ago
commit dd5ec49232

@ -53,29 +53,15 @@ 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
@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,
@ -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
@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

@ -97,6 +97,14 @@ public class Neo4jDataAutoConfigurationTests {
});
}
@Test
public void customSessionFactoryShouldNotDisableOtherDefaults() {
this.contextRunner.withUserConfiguration(CustomSessionFactory.class).run((context) -> {
assertThat(context).hasSingleBean(Neo4jTransactionManager.class);
assertThat(context).hasSingleBean(OpenSessionInViewInterceptor.class);
});
}
@Test
public void customConfiguration() {
this.contextRunner.withUserConfiguration(CustomConfiguration.class).run((context) -> {

@ -4385,9 +4385,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