使用 Spring Boot 和 Vue 构建 CRM 财务系统时,基于用户登录时的注册号动态选择数据库连接,并使用 SQL Server ODBC 驱动进行数据库操作,可以通过以下几个步骤来实现。
目录
1. 配置 Spring Boot 动态数据源
1.1. 引入依赖
1.2. 配置动态数据源
1.3. 数据源上下文持有类
1.4. 配置多个数据源
1.5. 在登录时设置数据源
2. 配置 Vue 前端
3. 连接 SQL Server ODBC 驱动
4. 总结
首先,我们需要配置 Spring Boot 动态数据源,根据用户登录时的注册号选择数据库连接。
在 pom.xml
中引入相关的依赖:
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-jpa
com.microsoft.sqlserver
mssql-jdbc
com.zaxxer
HikariCP
Spring Boot 默认是通过 application.properties
或 application.yml
配置数据源,但我们需要根据用户的注册号来动态选择数据源。我们可以使用 AbstractRoutingDataSource
来实现动态数据源切换。
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 这里可以根据当前线程的上下文来动态获取用户的注册号
return DataSourceContextHolder.getDataSource();
}
}
DataSourceContextHolder
类用于存储当前线程的注册号,以便在后续的数据库查询中可以获取当前要使用的数据库连接。
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal<>();
public static void setDataSource(String registerNo) {
contextHolder.set(registerNo);
}
public static String getDataSource() {
return contextHolder.get();
}
public static void clearDataSource() {
contextHolder.remove();
}
}
在 Spring Boot 配置类中,我们需要创建多个数据源并通过 DynamicDataSource
来进行管理。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
// 配置默认数据源
DataSource defaultDataSource = createDataSource("jdbc:sqlserver://localhost;DatabaseName=defaultDB");
dynamicDataSource.setDefaultTargetDataSource(defaultDataSource);
// 配置其他数据源
Map
在用户登录后,我们需要通过注册号来设置数据源。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@RestController
public class LoginController {
@PostMapping("/login")
public ResponseEntity login(@RequestParam String registerNo) {
// 根据用户注册号动态设置数据源
DataSourceContextHolder.setDataSource(registerNo);
// 登录逻辑代码...
return ResponseEntity.ok("Login successful");
}
}
在前端 Vue.js 部分,你可以创建一个登录页面,让用户输入注册号并发送请求到 Spring Boot 后端。
如果你需要通过 ODBC 连接 SQL Server,而不是直接使用 JDBC,你需要在数据库连接字符串中配置 ODBC 数据源名称(DSN)。以下是如何使用 ODBC 驱动进行连接:
1.在 application.properties
或 application.yml
中配置 ODBC 连接。
spring.datasource.url=jdbc:odbc:DSN=your_dsn_name
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
2.在 DataSourceConfig
中调整为使用 ODBC 驱动的连接字符串。
private DataSource createDataSource(String dsn) {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:odbc:" + dsn); // ODBC 连接
dataSource.setUsername("yourUsername");
dataSource.setPassword("yourPassword");
return dataSource;
}
通过这种方式,Spring Boot 可以根据用户登录的注册号动态切换数据库,确保不同的用户访问不同的数据库。
AbstractRoutingDataSource
来实现。DataSourceContextHolder
管理当前的数据源。