提交 57e13f4e 作者: zhaibin

双数据源设置

父级 cc9b6988
......@@ -247,6 +247,7 @@
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -5,7 +5,6 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.cmeeting.mapper")
public class TencentMeetingCallbackApplication {
public static void main(String[] args) {
SpringApplication.run(TencentMeetingCallbackApplication.class, args);
......
package com.cmeeting.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(
basePackages = "com.cmeeting.mapper.primary", // 主数据源的 Mapper 包路径
sqlSessionFactoryRef = "primarySqlSessionFactory"
)
public class PrimaryDataSourceConfig {
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary") // 绑定主数据源配置
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primarySqlSessionFactory")
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 可额外配置 MyBatis 的 mapperLocations、typeAliases 等
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/primary/*.xml"));
return factoryBean.getObject();
}
@Bean(name = "primaryTransactionManager")
public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
\ No newline at end of file
package com.cmeeting.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(
basePackages = "com.cmeeting.mapper.secondary", // 次数据源的 Mapper 包路径
sqlSessionFactoryRef = "secondarySqlSessionFactory"
)
public class SecondaryDataSourceConfig {
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary") // 绑定次数据源配置
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondarySqlSessionFactory")
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
// 可额外配置 MyBatis 的 mapperLocations、typeAliases 等
// 指定次数据源的 XML 映射文件路径
factoryBean.setMapperLocations(
new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/secondary/*.xml"));
return factoryBean.getObject();
}
@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
\ No newline at end of file
package com.cmeeting.controller;
import com.azure.core.annotation.Get;
import com.cmeeting.mapper.TecentMeetingMapper;
import com.cmeeting.mapper.UserIdMapper;
import com.cmeeting.mapper.WeComUserMapper;
import com.cmeeting.mapper.primary.TecentMeetingMapper;
import com.cmeeting.mapper.primary.UserIdMapper;
import com.cmeeting.mapper.primary.WeComUserMapper;
import com.cmeeting.pojo.TencentMeetingUser;
import com.cmeeting.pojo.UserId;
import com.cmeeting.pojo.WeComUser;
......@@ -126,6 +125,7 @@ public class UnifiedController {
//将获取到的腾讯会议userid插入到该用户的Tid字段
//取消预约会议
}
//todo 待测试
@GetMapping("/sameNameInsertTid")
public void sameNameInsertTid() throws IOException {
......@@ -152,6 +152,7 @@ public class UnifiedController {
}
userIdMapper.insertUsers(userIds);
}
/**
* 通过企业微信接口取消预约会议
*
......@@ -258,7 +259,6 @@ public class UnifiedController {
System.out.printf("Full HTTP response: %s\n", new String(e.getApiResp().getRawBody()));
throw new RuntimeException(e);
}
}
/**
......
package com.cmeeting.mapper;
package com.cmeeting.mapper.primary;
import com.cmeeting.pojo.TencentMeetingUser;
import com.cmeeting.pojo.WeComUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......
package com.cmeeting.mapper;
package com.cmeeting.mapper.primary;
import org.apache.ibatis.annotations.Mapper;
......
package com.cmeeting.mapper.primary;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserCompanyMapper {
/**
* 根据 userId 查询 email
*
* @param userId 用户 ID
* @return 对应的 email(如果存在),否则返回 null
*/
String selectEmailByUserId(@Param("userId") String userId);
}
package com.cmeeting.mapper;
package com.cmeeting.mapper.primary;
import com.cmeeting.pojo.UserId;
import org.apache.ibatis.annotations.Mapper;
......@@ -12,4 +12,5 @@ public interface UserIdMapper {
void updateUser(UserId user);
String getWidByTid(String operatorUserId);
}
// mapper/UserMapper.java
package com.cmeeting.mapper;
package com.cmeeting.mapper.primary;
import com.cmeeting.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.context.annotation.Bean;
@Mapper
public interface UserMapper {
......
package com.cmeeting.mapper;
package com.cmeeting.mapper.primary;
import com.cmeeting.pojo.WeComUser;
import org.apache.ibatis.annotations.Mapper;
......
package com.cmeeting.pojo;
import lombok.Data;
@Data
public class UserCompany {
private Integer id; // 对应表中的 `id`
private String userName; // 对应表中的 `user_name`
private String phone; // 对应表中的 `phone`
private String email; // 对应表中的 `emaill`(注意拼写修正为 email)
private String address; // 对应表中的 `address`
private String userId; // 对应表中的 `user_id`
// 无参构造方法
public UserCompany() {
}
// 全参构造方法
public UserCompany(Integer id, String userName, String phone, String email, String address, String userId) {
this.id = id;
this.userName = userName;
this.phone = phone;
this.email = email;
this.address = address;
this.userId = userId;
}
@Override
public String toString() {
return "UserCompany{" +
"id=" + id +
", userName='" + userName + '\'' +
", phone='" + phone + '\'' +
", email='" + email + '\'' +
", address='" + address + '\'' +
", userId='" + userId + '\'' +
'}';
}
}
\ No newline at end of file
package com.cmeeting.service.impl;
import com.cmeeting.mapper.TecentMeetingMapper;
import com.cmeeting.mapper.primary.TecentMeetingMapper;
import com.cmeeting.pojo.TencentMeetingUser;
import com.cmeeting.service.TecentMeetingService;
import org.springframework.beans.factory.annotation.Autowired;
......
......@@ -2,11 +2,12 @@
package com.cmeeting.service.impl;
import com.cmeeting.dto.LoginDTO;
import com.cmeeting.mapper.UserMapper;
import com.cmeeting.mapper.primary.UserMapper;
import com.cmeeting.pojo.User;
import com.cmeeting.service.UserService;
import com.cmeeting.vo.LoginVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
......
package com.cmeeting.service.impl;
import com.cmeeting.mapper.WeComUserMapper;
import com.cmeeting.mapper.primary.WeComUserMapper;
import com.cmeeting.pojo.WeComUser;
import com.cmeeting.service.WeComService;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.cmeeting.util;
import com.cmeeting.mapper.WeComUserMapper;
import com.cmeeting.mapper.primary.WeComUserMapper;
import com.cmeeting.pojo.WeComUser;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
......
......@@ -4,15 +4,28 @@ server.port=8080
tencent.meeting.token=QQZNb7xWQB47MpZF4C2DFAkv8
tencent.meeting.aesKey=agy6ALUePp34lljWz1uIQWa7yQq3dgxxQNmfaN9GROm
# application.yml
spring.datasource.url=jdbc:mysql://192.168.10.155:3306/cmeeting?useSSL=false&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=qizhi123
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# spring.datasource.url=jdbc:mysql://192.168.10.155:3306/cmeeting?useSSL=false&characterEncoding=utf8
# spring.datasource.username=root
# spring.datasource.password=qizhi123
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# ?????primary?
spring.datasource.primary.jdbc-url=jdbc:mysql://192.168.10.155:3306/cmeeting?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.primary.username=root
spring.datasource.primary.password=qizhi123
spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
# ?????secondary?
spring.datasource.secondary.jdbc-url=jdbc:mysql://192.168.10.155:3306/user_admin?useSSL=false&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.secondary.username=root
spring.datasource.secondary.password=qizhi123
spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver
# MyBatis ??
mybatis.mapper-locations=classpath:mapper/*.xml
# mybatis.mapper-locations=classpath:mapper/primary/*.xml
mybatis.type-aliases-package=com.cmeeting.pojo\
#??????
# ??????
mybatis.configuration.map-underscore-to-camel-case: true
logging.level.com.zaxxer.hikari=INFO
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.TecentMeetingMapper">
<mapper namespace="com.cmeeting.mapper.primary.TecentMeetingMapper">
<insert id="batchInsertUsers" parameterType="list">
INSERT INTO user_tencentmeeting (
user_name,
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.primary.UserCompanyMapper">
<!-- 根据 userId 查询 email -->
<select id="selectEmailByUserId" parameterType="string" resultType="string">
SELECT email
FROM user_company
WHERE user_id = #{userId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.UserIdMapper">
<mapper namespace="com.cmeeting.mapper.primary.UserIdMapper">
<!-- 批量插入用户ID信息 -->
<insert id="insertUsers" parameterType="List">
INSERT INTO userid (
......@@ -25,5 +25,8 @@
<select id="getUsers" resultType="com.cmeeting.pojo.UserId">
select * from userid
</select>
<select id="getWidByTid" resultType="java.lang.String">
select Wid from userid WHERE Tid = #{operatorUserId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.UserMapper">
<mapper namespace="com.cmeeting.mapper.primary.UserMapper">
<select id="findByUsername" resultType="com.cmeeting.pojo.User">
SELECT * FROM user WHERE username = #{username}
</select>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.WeComUserMapper">
<mapper namespace="com.cmeeting.mapper.primary.WeComUserMapper">
<select id="selectById" resultType="com.cmeeting.pojo.WeComUser">
SELECT id, user_name as userName, user_id as userId, isepeat_name as isRepeatName
FROM user_wecom
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmeeting.mapper.primary.UserCompanyMapper">
<!-- 根据 userId 查询 email -->
<select id="selectEmailByUserId" parameterType="string" resultType="string">
SELECT email
FROM user_company
WHERE user_id = #{userId}
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论