From dolphin-flow-harness
Transform Spring MVC projects to Spring Boot. Use when user wants to migrate, convert, or upgrade a Spring MVC project to Spring Boot, including pom.xml modifications, application.yml creation, web.xml to Java config migration, and SpringBootApplication startup class creation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dolphin-flow-harness:mvc2springbootThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Transform traditional Spring MVC projects to Spring Boot while preserving business logic.
Transform traditional Spring MVC projects to Spring Boot while preserving business logic.
Add Spring Boot parent and modify packaging:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<packaging>jar</packaging>
Add essential dependencies:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
Add Maven plugins:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals><goal>repackage</goal></goals>
<configuration>
<mainClass>【项目启动类路径】</mainClass>
</configuration>
</execution>
</executions>
</plugin>
Add resources configuration for JSP support:
<resources>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes><include>**/**</include></includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes><include>**/**</include></includes>
</resource>
</resources>
In root package, create startup class:
@SpringBootApplication
@ImportResource({
"classpath:spring-context.xml",
"classpath:spring-dubbo.xml",
"classpath:spring-dubbo-client.xml",
"classpath:spring-dubbo-server.xml",
"classpath:spring-mvc.xml"
})
public class ModuleSpringBootApplication {
private static final Logger logger = LoggerFactory.getLogger(ModuleSpringBootApplication.class);
public static void main(String[] args) {
SpringApplication.run(ModuleSpringBootApplication.class, args);
logger.info("==================== ModuleSpringBootApplication started ====================");
}
}
In src/main/resources/application.yml:
server:
port: 8080
context-path: /【模块名称】
spring:
profiles:
active: dev
application:
name: 【模块名称】
http:
encoding:
enabled: true
charset: utf-8
force: true
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
mvc:
view:
prefix: /
suffix: .jsp
Context Parameters:
@Configuration
public class ContextParamConfig {
@Bean
public ServletContextInitializer initializer() {
return sc -> sc.setInitParameter("webAppRootKey", "【项目.root】");
}
}
Listeners:
@Configuration
public class ListenerRegistrationConfig {
@Bean
public ServletListenerRegistrationBean<IntrospectorCleanupListener> introspectorCleanupListener() {
return new ServletListenerRegistrationBean<>(new IntrospectorCleanupListener());
}
@Bean
public ServletListenerRegistrationBean<RequestContextListener> requestContextListener() {
return new ServletListenerRegistrationBean<>(new RequestContextListener());
}
}
Filters:
@Configuration
public class FilterRegistrationConfig {
@Bean
public FilterRegistrationBean<XSSSecurityFilter> getXSSSecurityFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean(new XSSSecurityFilter());
Map<String, String> map = new HashMap<>();
map.put("securityconfig", "xss_security_config.xml");
map.put("filteringconfig", "xss_filter_config.xml");
map.put("filter.enable", "true");
bean.setInitParameters(map);
bean.addUrlPatterns("/*");
return bean;
}
// Add other filters similarly...
}
Servlets:
@Configuration
public class ServletRegistrationConfig {
@Bean
public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet());
bean.addUrlMappings("/webpage/system/druid/*");
return bean;
}
}
Move IAF_TAGLIB_TEMP folder to webapp/ - Spring Boot handles it automatically.
application-dev.propertiesapplication-test.propertiesapplication-prod.propertiesnpx claudepluginhub dolphin57/dolphin-claude-code --plugin dolphin-flow-harnessGuides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Provides Slack GIF creation utilities with dimension/FPS/color constraints and Python PIL-based frame generation. Use for animated Slack emoji or message GIFs.