springboot集成neo4j时,由于neo4j与shiro均包含名为"sessionFactory"的bean,项目启动时在生成neo4j的session对象时,createSharedSession方法报类型转换错误,此时需要为neo4j的"sessionFactory"重命名。代码如下:
/**
* @Author ZDJ
* @Date 2022-5-7 8:34
* @Description
*/
import org.neo4j.ogm.session.SessionFactory;
import org.neo4j.ogm.session.event.EventListener;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
import org.springframework.boot.autoconfigure.data.neo4j.Neo4jProperties;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.domain.EntityScanPackages;
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
import org.springframework.data.neo4j.transaction.Neo4jTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.util.StringUtils;
import java.util.List;
@Configuration
@EnableNeo4jRepositories(basePackages = "cjw.nic.niceasy.**.dao",sessionFactoryRef = "neo4jSessionFactory",
transactionManagerRef="neo4jTransaction")// 开启Neo4jRepositories的支持
@EntityScan(basePackages = "cjw.nic.niceasy.**..entity")// 开启实体类扫描
@EnableTransactionManagement // 开启事务
@EnableConfigurationProperties(Neo4jProperties.class)
public class Neo4jConfig {
@Value("${spring.data.neo4j.uri}")
private String uri;
@Value("${spring.data.neo4j.username}")
private String username;
@Value("${spring.data.neo4j.password}")
private String password;
@Bean("neo4jSessionFactory")
@Primary
public SessionFactory sessionFactory(org.neo4j.ogm.config.Configuration configuration,
ApplicationContext applicationContext,
ObjectProvider<EventListener> eventListeners) {
SessionFactory sessionFactory = new SessionFactory(configuration, "cjw.nic.niceasy.**..entity");
eventListeners.stream().forEach(sessionFactory::register);
return sessionFactory;
}
@Bean
public org.neo4j.ogm.config.Configuration configuration() {
return new org.neo4j.ogm.config.Configuration.Builder()
.uri(uri).credentials(username, password).build();
}
@Bean("neo4jTransaction")
public Neo4jTransactionManager transactionManager(SessionFactory sessionFactory,
Neo4jProperties properties,
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
return customize(new Neo4jTransactionManager(sessionFactory),
transactionManagerCustomizers.getIfAvailable());
}
private Neo4jTransactionManager customize(Neo4jTransactionManager transactionManager,
TransactionManagerCustomizers customizers) {
if (customizers != null) {
customizers.customize(transactionManager);
}
return transactionManager;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)