Eclipse老用户看过来:告别手动配置,用Gradle+Boot一步搞定Spring Boot项目(附完整build.gradle)

news2026/5/7 21:51:58
Eclipse老用户迁移指南用GradleBoot打造高效Spring Boot工作流如果你是从Eclipse时代走过来的Java开发者可能还记得那些手动管理JAR包的日子——下载依赖、配置classpath、解决版本冲突每一步都充满挑战。如今Gradle和Spring Boot的组合已经彻底改变了Java项目的构建方式。本文将带你从Eclipse的传统工作流平滑过渡到现代Gradle构建体系特别针对Spring Boot项目进行深度优化。1. 为什么Eclipse开发者需要拥抱GradleEclipse曾经是Java开发的主流IDE其内置的Ant和后来的Maven支持为一代开发者所熟悉。但Gradle带来了几个革命性的改进声明式依赖管理不再需要像Maven那样编写冗长的XML配置增量构建只重新编译变更的部分大幅提升构建速度灵活的DSLGroovy/Kotlin脚本比XML更易读易写Spring Boot深度集成官方推荐的构建工具提供专属插件对于Spring Boot项目Gradle的优势尤为明显。下面是一个传统Maven pom.xml与Gradle build.gradle的对比功能Maven (pom.xml)Gradle (build.gradle)声明Spring Boot依赖需要parent POM只需一个插件声明自定义任务需配置插件原生支持Groovy/Kotlin脚本构建速度较慢增量构建快2-3倍多模块项目可行但配置复杂简洁直观的DSL提示Eclipse的Buildship插件已经相当成熟完全支持Gradle 7.x及以上版本不用担心IDE兼容性问题。2. 环境准备EclipseGradle完美组合2.1 安装Buildship插件虽然新版Eclipse已内置Gradle支持但建议通过Marketplace安装最新版Buildship打开Eclipse进入Help Eclipse Marketplace搜索Buildship选择Gradle官方插件完成安装后重启Eclipse验证安装成功# 在终端检查Gradle版本 gradle -v2.2 配置Gradle运行时Eclipse默认使用包装器Wrapper但建议配置本地Gradle实例进入Window Preferences Gradle选择Local installation directory指向你的Gradle安装路径勾选Offline mode避免不必要的网络请求推荐配置Gradle 7.5版本Java 11或17运行环境至少2GB堆内存在gradle.properties中配置3. 从零创建Spring Boot项目3.1 项目初始化抛弃传统的向导式创建改用Gradle的init命令# 在终端执行无需Eclipse gradle init --type java-application --dsl groovy --test-framework junit-jupiter然后在Eclipse中导入File Import Gradle Existing Gradle Project选择刚才创建的目录勾选Buildship下的所有选项3.2 关键build.gradle配置以下是针对Spring Boot 2.7优化的build.gradle示例plugins { id java id eclipse id org.springframework.boot version 2.7.3 id io.spring.dependency-management version 1.0.13.RELEASE } sourceCompatibility 17 repositories { mavenCentral() maven { url https://repo.spring.io/milestone } } dependencies { implementation org.springframework.boot:spring-boot-starter-web implementation org.springframework.boot:spring-boot-starter-data-jpa runtimeOnly com.h2database:h2 // 开发时有用工具 developmentOnly org.springframework.boot:spring-boot-devtools // 测试相关 testImplementation org.springframework.boot:spring-boot-starter-test testImplementation org.junit.jupiter:junit-jupiter-api:5.8.2 testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.8.2 } test { useJUnitPlatform() } bootRun { // 配置开发时系统属性 systemProperties System.properties }几个关键点说明io.spring.dependency-management插件自动处理Spring生态的版本兼容developmentOnly配置确保devtools不会打包到生产环境bootRun自定义配置方便开发时调试4. 高效开发工作流4.1 实时类重载配置结合Spring Boot DevTools和Eclipse自动构建在Eclipse中开启自动构建Preferences General Workspace Build automatically添加DevTools依赖见上节build.gradle配置application.propertiesspring.devtools.restart.enabledtrue spring.devtools.livereload.enabledtrue注意修改静态资源时按CtrlF9触发快速重启Java类修改会自动触发4.2 调试技巧Gradle项目在Eclipse中的调试需要特殊配置创建调试配置右键项目 Debug As Debug Configurations创建新的Gradle Project配置添加JVM参数-agentlib:jdwptransportdt_socket,servery,suspendn,address5005使用远程调试连接Right-click project Debug As Remote Java Application4.3 多模块项目结构大型项目推荐采用多模块结构示例settings.gradlerootProject.name my-enterprise-app include core-service include web-interface include batch-processor每个子模块有自己的build.gradle父项目配置公共部分// 根build.gradle subprojects { apply plugin: java apply plugin: io.spring.dependency-management repositories { mavenCentral() } dependencies { implementation platform(org.springframework.boot:spring-boot-dependencies:2.7.3) } }5. 生产环境准备5.1 构建优化配置在gradle.properties中添加# 并行构建 org.gradle.paralleltrue # 守护进程 org.gradle.daemontrue # 缓存配置 org.gradle.cachingtrue5.2 打包部署Spring Boot特有的打包方式# 生成可执行JAR gradle bootJar # 生成Docker镜像需Docker插件 gradle bootBuildImage对于War包部署// build.gradle添加 apply plugin: war bootWar { archiveFileName app.war // 排除内嵌容器如需部署到外部Tomcat providedRuntime org.springframework.boot:spring-boot-starter-tomcat }5.3 常用Gradle命令速查命令作用常用参数gradle build执行完整构建--continuous 持续构建gradle bootRun运行Spring Boot应用--args--server.port8081gradle test运行测试--tests *ServiceTestgradle dependencies显示依赖树--configuration runtimeClasspathgradle clean build清理后重新构建-x test 跳过测试6. 疑难问题解决6.1 常见错误处理依赖冲突# 查看依赖树 gradle dependencies # 排除特定依赖 implementation(org.springframework.boot:spring-boot-starter-web) { exclude group: org.springframework.boot, module: spring-boot-starter-tomcat }构建缓存问题# 清理缓存 gradle clean --refresh-dependencies6.2 性能调优如果构建速度慢尝试增加Gradle堆内存# gradle.properties org.gradle.jvmargs-Xmx4g -XX:MaxMetaspaceSize1g启用构建扫描gradle build --scan避免不必要的任务# 只编译不测试不打包 gradle compileJava7. 进阶技巧7.1 自定义任务在build.gradle中添加实用任务task openSwaggerUi(type: Exec) { commandLine open, http://localhost:8080/swagger-ui.html dependsOn bootRun doFirst { println 启动Swagger UI... } }7.2 代码生成集成整合OpenAPI生成器plugins { id org.openapi.generator version 5.4.0 } openApiGenerate { generatorName spring inputSpec $rootDir/src/main/resources/api-spec.yaml outputDir $buildDir/generated apiPackage com.example.api modelPackage com.example.model configOptions [ interfaceOnly: true, useTags: true ] } // 将生成的代码加入源码集 sourceSets.main.java.srcDir $buildDir/generated/src/main/java7.3 多环境配置使用Profiles管理不同环境bootRun { // 默认开发环境 systemProperty spring.profiles.active, dev } task prodBootRun(type: org.springframework.boot.gradle.tasks.run.BootRun) { systemProperty spring.profiles.active, prod }对应application-prod.propertiesspring.datasource.urljdbc:mysql://prod-db:3306/app spring.jpa.hibernate.ddl-autovalidate8. 从Maven迁移指南8.1 迁移步骤在项目根目录运行gradle init --type pom检查生成的build.gradle逐步替换Maven特有配置8.2 重要概念对比Maven概念Gradle等效说明dependenciesdependencies {}声明方式更简洁profiles自定义任务系统属性更灵活的配置方式pluginsplugins {}插件DSL更类型安全propertiesext {} 或 gradle.properties支持更复杂的变量逻辑8.3 迁移检查清单[ ] 确保所有依赖在Gradle中都有对应版本[ ] 转换Maven插件功能到Gradle任务[ ] 配置等效的构建生命周期[ ] 设置CI/CD管道使用Gradle命令[ ] 更新开发者文档中的构建说明9. 生态系统整合9.1 静态代码分析集成Checkstyle和PMDplugins { id checkstyle id pmd } checkstyle { toolVersion 9.3 configFile file(${rootDir}/config/checkstyle.xml) } pmd { toolVersion 6.46.0 ruleSets [] ruleSetFiles files(${rootDir}/config/pmd-ruleset.xml) }9.2 数据库迁移使用Flyway或Liquibasedependencies { implementation org.flywaydb:flyway-core // 或 implementation org.liquibase:liquibase-core }配置示例spring.flyway.locationsclasspath:db/migration spring.flyway.baseline-on-migratetrue9.3 监控与度量集成Micrometer和Prometheusdependencies { implementation org.springframework.boot:spring-boot-starter-actuator implementation io.micrometer:micrometer-registry-prometheus }10. 持续集成配置10.1 GitHub Actions示例name: Java CI with Gradle on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up JDK 17 uses: actions/setup-javav3 with: java-version: 17 distribution: temurin cache: gradle - name: Build with Gradle run: ./gradlew build - name: Run tests run: ./gradlew test10.2 构建缓存配置在settings.gradle中buildCache { local { directory new File(rootDir, build-cache) removeUnusedEntriesAfterDays 30 } }11. 开发者体验优化11.1 预提交钩子在.git/hooks/pre-commit中添加#!/bin/sh ./gradlew check if [ $? -ne 0 ]; then echo 构建检查失败请修复问题后再提交 exit 1 fi11.2 IDE配置同步在build.gradle中添加eclipse { classpath { downloadSources true downloadJavadoc true } }11.3 文档生成集成Asciidoctor生成API文档plugins { id org.asciidoctor.jvm.convert version 3.3.2 } ext { snippetsDir file(build/generated-snippets) } test { outputs.dir snippetsDir } asciidoctor { inputs.dir snippetsDir dependsOn test }12. 微服务特别配置12.1 Spring Cloud集成plugins { id org.springframework.cloud.contract version 3.1.5 } ext { set(springCloudVersion, 2021.0.3) } dependencyManagement { imports { mavenBom org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion} } } dependencies { implementation org.springframework.cloud:spring-cloud-starter-config implementation org.springframework.cloud:spring-cloud-starter-netflix-eureka-client }12.2 OpenFeign客户端dependencies { implementation org.springframework.cloud:spring-cloud-starter-openfeign }创建Feign客户端FeignClient(name inventory-service) public interface InventoryClient { GetMapping(/api/inventory/{sku}) InventoryStatus checkStock(PathVariable String sku); }13. 响应式编程支持13.1 WebFlux配置dependencies { implementation org.springframework.boot:spring-boot-starter-webflux }13.2 R2DBC数据库dependencies { implementation org.springframework.boot:spring-boot-starter-data-r2dbc runtimeOnly io.r2dbc:r2dbc-h2 }响应式Repository示例public interface UserRepository extends ReactiveCrudRepositoryUser, Long { FluxUser findByStatus(String status); }14. 安全配置最佳实践14.1 Spring Security集成dependencies { implementation org.springframework.boot:spring-boot-starter-security }14.2 JWT支持dependencies { implementation io.jsonwebtoken:jjwt-api:0.11.5 runtimeOnly io.jsonwebtoken:jjwt-impl:0.11.5 runtimeOnly io.jsonwebtoken:jjwt-jackson:0.11.5 }安全配置示例EnableWebSecurity public class SecurityConfig { Bean SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests(auth - auth .antMatchers(/api/public/**).permitAll() .anyRequest().authenticated() ) .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt); return http.build(); } }15. 测试策略15.1 分层测试配置dependencies { testImplementation org.springframework.boot:spring-boot-starter-test testImplementation io.projectreactor:reactor-test testImplementation org.springframework.security:spring-security-test // 集成测试专用配置 testImplementation org.testcontainers:junit-jupiter:1.17.3 testImplementation org.testcontainers:postgresql:1.17.3 }15.2 测试切片示例WebMvcTest(UserController.class) class UserControllerTests { Autowired MockMvc mvc; MockBean UserService service; Test void shouldReturnUser() throws Exception { given(service.findById(any())).willReturn(new User(test)); mvc.perform(get(/api/users/1)) .andExpect(status().isOk()) .andExpect(jsonPath($.name).value(test)); } }16. 容器化部署16.1 Docker镜像构建plugins { id org.springframework.boot version 2.7.3 id io.spring.dependency-management version 1.0.13.RELEASE id com.palantir.docker version 0.34.0 } docker { name ${project.name}:${project.version} files bootJar.archiveFile.get() buildArgs([JAR_FILE: ${bootJar.archiveFileName.get()}]) }对应的DockerfileFROM eclipse-temurin:17-jre ARG JAR_FILE COPY ${JAR_FILE} app.jar ENTRYPOINT [java,-jar,/app.jar]16.2 Kubernetes部署创建deployment.yamlapiVersion: apps/v1 kind: Deployment metadata: name: spring-app spec: replicas: 3 selector: matchLabels: app: spring-app template: metadata: labels: app: spring-app spec: containers: - name: app image: your-registry/spring-app:1.0.0 ports: - containerPort: 8080 env: - name: SPRING_PROFILES_ACTIVE value: prod17. 性能监控17.1 Micrometer配置dependencies { implementation io.micrometer:micrometer-core implementation io.micrometer:micrometer-registry-prometheus }17.2 自定义指标RestController public class MetricsController { private final Counter visitCounter; public MetricsController(MeterRegistry registry) { visitCounter registry.counter(app.visits); } GetMapping(/visit) public String visit() { visitCounter.increment(); return Visited!; } }18. 日志管理18.1 Logback配置在src/main/resources/logback-spring.xml中configuration include resourceorg/springframework/boot/logging/logback/defaults.xml/ property nameLOG_FILE value${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}/ appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_FILE}/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz/fileNamePattern maxFileSize10MB/maxFileSize maxHistory30/maxHistory /rollingPolicy encoder pattern${FILE_LOG_PATTERN}/pattern /encoder /appender root levelINFO appender-ref refFILE/ /root /configuration18.2 结构化日志添加Logstash编码器dependencies { implementation net.logstash.logback:logstash-logback-encoder:7.2 }19. 异常处理策略19.1 全局异常处理RestControllerAdvice public class GlobalExceptionHandler { ExceptionHandler(ResourceNotFoundException.class) public ResponseEntityErrorResponse handleNotFound(ResourceNotFoundException ex) { return ResponseEntity .status(HttpStatus.NOT_FOUND) .body(new ErrorResponse(NOT_FOUND, ex.getMessage())); } record ErrorResponse(String code, String message) {} }19.2 错误页面配置# application.properties server.error.whitelabel.enabledfalse server.error.path/error自定义错误控制器RestController RequestMapping(/error) public class CustomErrorController implements ErrorController { RequestMapping public ResponseEntityErrorResponse handleError(HttpServletRequest request) { HttpStatus status getStatus(request); return ResponseEntity .status(status) .body(new ErrorResponse(status.name(), Something went wrong)); } private HttpStatus getStatus(HttpServletRequest request) { Integer code (Integer) request.getAttribute(javax.servlet.error.status_code); return code ! null ? HttpStatus.valueOf(code) : HttpStatus.INTERNAL_SERVER_ERROR; } }20. 现代化前端集成20.1 Thymeleaf配置dependencies { implementation org.springframework.boot:spring-boot-starter-thymeleaf }20.2 前端构建集成plugins { id com.github.node-gradle.node version 3.3.0 } node { version 16.14.2 download true } task npmBuild(type: NpmTask) { args [run, build] } processResources.dependsOn npmBuild21. 消息队列集成21.1 RabbitMQ配置dependencies { implementation org.springframework.boot:spring-boot-starter-amqp }21.2 Kafka配置dependencies { implementation org.springframework.kafka:spring-kafka }消费者示例KafkaListener(topics orders) public void processOrder(Order order) { log.info(Processing order: {}, order.getId()); orderService.process(order); }22. 分布式缓存22.1 Redis配置dependencies { implementation org.springframework.boot:spring-boot-starter-data-redis }22.2 缓存注解使用Service public class ProductService { Cacheable(value products, key #id) public Product findById(Long id) { // 数据库查询 } CacheEvict(value products, key #product.id) public void update(Product product) { // 更新操作 } }23. 分布式追踪23.1 Sleuth Zipkindependencies { implementation org.springframework.cloud:spring-cloud-starter-sleuth implementation org.springframework.cloud:spring-cloud-sleuth-zipkin }配置示例spring.zipkin.base-urlhttp://localhost:9411 spring.sleuth.sampler.probability1.024. API文档生成24.1 SpringDoc OpenAPIdependencies { implementation org.springdoc:springdoc-openapi-ui:1.6.11 }配置示例springdoc.api-docs.path/api-docs springdoc.swagger-ui.path/swagger-ui.html25. 数据库迁移策略25.1 Flyway配置dependencies { implementation org.flywaydb:flyway-core }25.2 多数据源支持Configuration EnableJpaRepositories( basePackages com.example.primary, entityManagerFactoryRef primaryEntityManager, transactionManagerRef primaryTransactionManager ) public class PrimaryDataSourceConfig { Bean Primary ConfigurationProperties(spring.datasource.primary) public DataSourceProperties primaryDataSourceProperties() { return new DataSourceProperties(); } Bean Primary public DataSource primaryDataSource() { return primaryDataSourceProperties() .initializeDataSourceBuilder() .build(); } }26. 批处理作业26.1 Spring Batch配置dependencies { implementation org.springframework.boot:spring-boot-starter-batch }26.2 简单批处理示例Configuration public class BatchConfig { Bean public Job importUserJob(JobRepository jobRepository, Step step) { return new JobBuilder(importUserJob, jobRepository) .start(step) .build(); } Bean public Step step(JobRepository jobRepository, PlatformTransactionManager txManager) { return new StepBuilder(step, jobRepository) .User, Userchunk(10, txManager) .reader(reader()) .processor(processor()) .writer(writer()) .build(); } }27. 定时任务27.1 Scheduled注解Service public class ReportService { Scheduled(cron 0 0 9 * * MON-FRI) public void generateDailyReport() { // 生成报告逻辑 } }27.2 动态调度Configuration EnableScheduling public class SchedulerConfig implements SchedulingConfigurer { Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.addTriggerTask( () - System.out.println(Dynamic task running), triggerContext - { // 动态计算下次执行时间 return new CronTrigger(0 */5 * * * *).nextExecutionTime(triggerContext); } ); } }28. 验证与数据绑定28.1 Bean验证dependencies { implementation org.springframework.boot:spring-boot-starter-validation }28.2 自定义验证器public class UniqueUsernameValidator implements ConstraintValidatorUniqueUsername, String { private final UserRepository repository; public boolean isValid(String username, ConstraintValidatorContext context) { return !repository.existsByUsername(username); } }29. 国际化支持29.1 消息源配置# application.properties spring.messages.basenamemessages spring.messages.encodingUTF-829.2 控制器中使用RestController public class GreetingController { GetMapping(/greet) public String greet(RequestHeader(Accept-Language) String lang, Locale locale) { return messageSource.getMessage(greeting.message, null, locale); } }30. 安全审计30.1 Spring Data审计EntityListeners(AuditingEntityListener.class) Entity public class User { CreatedBy private String createdBy; LastModifiedDate private LocalDateTime lastModified; }30.2 启用审计Configuration EnableJpaAuditing public class AuditConfig { Bean public AuditorAwareString auditorAware() { return () - Optional.of(SecurityContextHolder.getContext()) .map(SecurityContext::getAuthentication) .filter(Authentication::isAuthenticated) .map(Authentication::getName); } }31. 文件上传处理31.1 上传配置# application.properties spring.servlet.multipart.max-file-size10MB spring.servlet.multipart.max-request-size10MB31.2 控制器处理PostMapping(/upload) public String handleUpload(RequestParam(file) MultipartFile file) { if (!file.isEmpty()) { Path path Paths.get(/uploads/ file.getOriginalFilename()); Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING); return Upload successful; } return Upload failed; }32. 邮件发送32.1 邮件配置# application.properties spring.mail.hostsmtp.example.com spring.mail.port587 spring.mail.usernameuser spring.mail.passwordpass spring.mail.properties.mail.smtp.authtrue spring.mail.properties.mail.smtp.starttls.enabletrue32.2 发送邮件Service public class EmailService { private final JavaMailSender mailSender; public void sendSimpleMessage(String to, String subject, String text) { SimpleMailMessage message new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } }33. 健康检查33.1 自定义健康指标Component public class DatabaseHealthIndicator implements HealthIndicator { private final DataSource dataSource; Override public Health health() { try (Connection conn dataSource.getConnection()) { return Health.up().withDetail(database, Available).build(); } catch (Exception e) { return Health.down().withDetail(database, Unavailable).build(); } } }33.2 健康端点配置# application.properties management.endpoint.health.show-detailsalways management.endpoint.health.show-componentsalways34. 配置管理34.1 外部化配置# application.properties app.nameMy Application app.description${app.name} is a Spring Boot application34.2 类型安全配置ConfigurationProperties(app) public class AppProperties { private String name; private String description; // getters and setters }35. 自定义启动器35.1 创建自动配置Configuration ConditionalOnClass(MyService.class) EnableConfigurationProperties(MyProperties.class) public class MyAutoConfiguration { Bean ConditionalOnMissingBean public MyService myService(MyProperties properties) { return new MyService(properties); } }35.2 注册自动配置在src/main/resources/META-INF/spring.factories中org.springframework.boot.autoconfigure.EnableAutoConfiguration\ com.example.MyAutoConfiguration36. 性能优化技巧36.1 JVM调优# application.properties spring.main.lazy-initializationtrue36.2 连接池配置# application.properties spring.datasource.hikari.maximum-pool-size10 spring.datasource.hikari.connection-timeout3000037. 异常监控37.1 Sentry集成dependencies { implementation io.sentry:sentry-spring-boot-starter:6.4.1 }37.2 配置Sentry# application.properties sentry.dsnhttps://your-keysentry.io/your-project sentry.environmentproduction38. 数据库优化38.1 JPA调优# application.properties spring.jpa.properties.hibernate.jdbc.batch_size20 spring.jpa.properties.hibernate.order_insertstrue38.2 查询优化public interface UserRepository extends JpaRepositoryUser, Long { EntityGraph(attributePaths roles) Query(select u from User u where u.username :username) OptionalUser findByUsernameWithRoles(Param(username) String username); }39. 测试数据准备39.1 Testcontainers配置dependencies { testImplementation org.testcontainers:junit-jupiter:1.17.3 testImplementation org.testcontainers:postgresql:1.17.3 }39.2 集成测试示例Testcontainers DataJpaTest AutoConfigureTestDatabase(replace AutoConfigureTestDatabase.Replace.NONE) class UserRepositoryTests { Container static PostgreSQLContainer? postgres new PostgreSQLContainer(postgres:14); DynamicPropertySource static void configureProperties(DynamicPropertyRegistry registry) { registry.add(spring.datasource.url, postgres::getJdbcUrl); registry.add(spring.datasource.username, postgres::getUsername); registry.add(spring.datasource.password, postgres::getPassword); } }40. 构建信息暴露40.1 生成构建信息在build.gradle中添加springBoot { buildInfo() }40.2 访问构建信息# application.properties management.info.build.enabledtrue通过/actuator/info端点访问{ build: { version: 1.0.0, artifact: demo, name: demo, group: com.example, time: 2023-05-01T10:15:30Z } }41. 自定义端点41.1 创建管理端点Endpoint(id features) Component public class FeaturesEndpoint { ReadOperation public MapString, Object features() { return Map.of( featureA, true, featureB, false ); } }41.2 端点安全配置# application.properties management.endpoints.web.exposure.includehealth,info,features management.endpoint.features.enabledtrue42. 配置加密42.1 Jasypt集成dependencies { implementation com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.4 }42.2 加密配置# application.properties jasypt.encryptor.passwordmy-secret-key

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2592761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…