"前后端分离档案管理系统"是一个基于现代Web技术栈构建的企业级文档管理解决方案。这个系统采用了SpringBoot+Vue+MyBatis+MySQL的技术组合,实现了档案的电子化存储、分类管理和权限控制。我在实际开发中发现,这种架构特别适合需要高安全性和灵活性的文档管理场景。
传统档案管理系统往往采用单体架构,导致前后端耦合严重、维护困难。而这个项目通过前后端分离的设计,让前端Vue.js负责用户交互和界面展示,后端SpringBoot处理业务逻辑和数据持久化,两者通过RESTful API进行通信。这种架构不仅提升了开发效率,还使得系统更容易扩展和维护。
SpringBoot作为后端框架的选择非常明智。它简化了Spring应用的初始搭建和开发过程,通过自动配置减少了大量样板代码。我在项目中特别利用了它的这些特性:
MyBatis作为ORM框架,相比Hibernate提供了更灵活的SQL控制能力。对于档案管理系统这种需要复杂查询的业务场景特别合适。我通常会这样配置MyBatis:
java复制@Mapper
public interface ArchiveMapper {
@Select("SELECT * FROM archives WHERE category = #{category}")
List<Archive> findByCategory(String category);
// 其他自定义查询方法
}
Vue.js作为前端框架,其响应式数据绑定和组件化开发模式大大提升了开发效率。在档案管理系统中,我特别推荐使用以下Vue生态工具:
一个典型的档案列表组件可能这样实现:
vue复制<template>
<el-table :data="archives" style="width: 100%">
<el-table-column prop="title" label="档案名称"></el-table-column>
<el-table-column prop="createTime" label="创建时间"></el-table-column>
<!-- 其他列定义 -->
</el-table>
</template>
<script>
export default {
data() {
return {
archives: []
}
},
created() {
this.fetchArchives()
},
methods: {
async fetchArchives() {
const res = await this.$http.get('/api/archives')
this.archives = res.data
}
}
}
</script>
MySQL作为关系型数据库,为档案管理系统提供了可靠的数据存储方案。关键的数据库表设计包括:
我通常会使用Flyway或Liquibase来管理数据库变更,确保在不同环境中的一致性。
档案管理系统的核心功能包括:
用户认证与授权
档案管理
系统管理
档案管理系统的核心功能之一是文件上传。我采用了以下方案:
java复制@RestController
@RequestMapping("/api/archives")
public class ArchiveController {
@PostMapping("/upload")
public ResponseEntity<String> uploadArchive(
@RequestParam("file") MultipartFile file,
@RequestParam("category") String category) {
// 校验文件类型和大小
if (file.isEmpty()) {
return ResponseEntity.badRequest().body("文件不能为空");
}
// 生成唯一文件名
String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename();
// 存储文件
Path path = Paths.get("uploads", fileName);
try {
Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
// 保存档案信息到数据库
Archive archive = new Archive();
archive.setFileName(fileName);
archive.setOriginalName(file.getOriginalFilename());
archive.setCategory(category);
archiveService.save(archive);
return ResponseEntity.ok("上传成功");
} catch (IOException e) {
return ResponseEntity.status(500).body("上传失败");
}
}
}
注意:实际项目中应该将文件存储在专门的存储服务如MinIO或阿里云OSS中,而不是直接放在应用服务器上。
档案管理系统需要严格的权限控制。我采用了Spring Security结合JWT的实现方案:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/archives/download/**").permitAll()
.antMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
// 其他配置...
}
部署系统前需要准备以下环境:
properties复制spring.datasource.url=jdbc:mysql://localhost:3306/archive_db?useSSL=false
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
# 文件上传配置
file.upload-dir=./uploads
bash复制mvn clean package
java -jar target/archive-system-0.0.1-SNAPSHOT.jar
bash复制npm install
ini复制VUE_APP_API_BASE_URL=http://localhost:8080/api
bash复制npm run serve
bash复制npm run build
构建后的静态文件可以部署到Nginx或Apache等Web服务器上。
前后端分离架构常见的问题是跨域请求被阻止。解决方案是在后端添加CORS配置:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(false)
.maxAge(3600);
}
}
Spring Boot默认的文件上传大小限制是1MB,可以通过以下配置调整:
properties复制spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
对于生产环境,建议配置合适的连接池参数:
properties复制spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=2000000
spring.datasource.hikari.connection-timeout=30000
Vue项目部署后刷新页面可能出现404错误,需要在Nginx配置中添加:
nginx复制location / {
try_files $uri $uri/ /index.html;
}
在实际项目中,我发现档案管理系统的性能瓶颈往往出现在文件上传下载和大数据量查询场景。针对这些问题,可以采用以下解决方案:
对于企业级应用,还应该考虑高可用部署方案,包括: