概述
我们在做项目时,有时会同时用到关系型数据库和图数据库,这个一般根据业务以及技术选型来定,如果同时用到了Neo4j,Mysql两种数据库,我们的数据源应该怎么配置呢?下面跟着文章我们一点一点揭开面纱
mysql我们采用mybatis框架
首先看下我们pom.xml文件的引用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.4</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> <scope>runtime</scope> </dependency> <!--neo4j--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId> </dependency> <!-- 扫描路径,版本为2.21b不然的话在服务器上 neo4j mapper不生效 --> <dependency> <groupId>io.github.lukehutch</groupId> <artifactId>fast-classpath-scanner</artifactId> <version>2.21</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>27.0.1-jre</version> </dependency> <!--ftp--> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.9.RELEASE</version> <scope>compile</scope> </dependency> </dependencies>
1
2
3
4
5
6<dependency> <groupId>io.github.lukehutch</groupId> <artifactId>fast-classpath-scanner</artifactId> <version>2.21</version> </dependency>
其中这段是最容易忽视的,单独配置neo4j或者MySQL都是没有问题的,在idea单独跑也是没问题的,但如果neo4j和mysql一起使用必须配置这里,因为他默认是用2.18版本,对应的找不到neo4j对应mapper的路径,所以我们这里加入2.21版本的配置
接着修改我们的配置文件加入mysql地址
1
2
3
4
5
6
7
8
9
10
11
12
13spring: datasource: industrygraph: url: jdbc:mysql://127.0.0.1:3306/industry_graph?useSSL=false&autoReconnect=true&failOverReadOnly=false&characterEncoding=utf-8&useUnicode=true&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8 username: myang password: 123456 driver-class-name: com.mysql.jdbc.Driver data: neo4j: uri: bolt://127.0.0.1:7687 username: neo4j password: 123456
接着配置我们的mysql的数据源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34/** * @Author Created by YangMeng on 2021/3/3. */ @Configuration @MapperScan(basePackages = {"com.abcft.industrygraphmanagement.dao.mysql"}, sqlSessionTemplateRef = "industrygraphSqlSessionTemplate") public class DatabaseSourceConfig { @Bean(name = "industrygraphDataSource") @ConfigurationProperties(prefix = "spring.datasource.industrygraph") public DataSource industrygraphDataSource() { //指定使用DruidDataSource return DataSourceBuilder.create().type(DruidDataSource.class).build(); } @Bean public SqlSessionFactory industrygraphSqlSessionFactory(@Qualifier("industrygraphDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/graph/*.xml")); org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setMapUnderscoreToCamelCase(true); bean.setConfiguration(configuration); return bean.getObject(); } @Bean public DataSourceTransactionManager industrygraphTransactionManager(@Qualifier("industrygraphDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean public SqlSessionTemplate industrygraphSqlSessionTemplate(@Qualifier("industrygraphSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); }
因为neo4j也是支持事务的,所以我们在事务这块要区分开mysql的事务和neo4j的事务,通过@EnableTransactionManagement 来开启事务,然后我们加入以下配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27@Aspect @Configuration @EnableTransactionManagement @Slf4j public class Neo4jConfig { /** * 定义neo4j事务 * * @param sessionFactory * @return */ @Bean("neo4jTransactionManager") public Neo4jTransactionManager neo4jTransactionManager(SessionFactory sessionFactory) { return new Neo4jTransactionManager(sessionFactory); } /** * 定义mysql 事务 * * @param emf * @return */ @Bean("transactionManager") public JpaTransactionManager jpaTransactionManager(EntityManagerFactory emf) { return new JpaTransactionManager(emf); } }
然后我们在service层使用的时候指定相应的事务就行了
1
2
3
4
5@Override @Transactional(transactionManager = "neo4jTransactionManager") public void updateCompanyEntry(CompanyEntryCondition companyEntryCondition) throws Exception { }
其实neo4j和mysql配置主要在于事务的配置和mapper路径的查找,希望本篇读完大家可以亲手配置跑一下程序试试,我这里就不贴出来。
在实际的项目中业务可能比较复杂,涉及到数据库混合操作,比如一个方法里既有neo4j的更新又有mysql的更新,这样就涉及了多事务共同使用,下篇文章我们来说说批量事务怎么定义和提交,今天就到这里了,拜拜。
有疑问请点赞和留言哈,我会及时回复。
- 本期完 -
为方便看最新内容,记得关注哦!
最后
以上就是魔幻啤酒为你收集整理的Springboot+Neo4j+Mysql多数据源配置(一)的全部内容,希望文章能够帮你解决Springboot+Neo4j+Mysql多数据源配置(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复