1、自定义横幅
简单就一点你需要把banner.text放到classpath 路径下 ,默认它会找叫做banner的文件,各种格式的都可以 ,但是实际只能输出成符号图形 图片也行但是显示的结果就和下图一样
也可以使用代码
@SpringBootApplication
public class GatewayTestApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(GatewayTestApplication.class);
springApplication.setBanner((environment, sourceClass, out)->{
out.println("***************************");
out.println("* 啦啦啦啦 *");
out.println("***************************");
});
springApplication.run(args);
}
}
优先输出自定义横幅
- 先检查是否有横幅图片文件,.jpg.phg这样的
- 在检查banner.text文件
- 最后检查代码配置的文件
根据顺序优先只显示一个,后面的不会在显示
2、容器刷新后触发方法自定义
public class MyApplicationContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
// 在容器刷新完成后执行的操作
System.out.println("在容器刷新完成后执行的操作");
// 可以在这里添加任何你需要的初始化逻
String[] beanDefinitionNames = applicationContext.getBeanFactory().getBeanDefinitionNames();
System.out.println(Arrays.toString(beanDefinitionNames));
}
}
3、容器启动后触发方法自定义
结果示例
Spring启动容器好会调用callRunners(context, applicationArguments); 方法
这个方法扫描了实现 这两个接口的类
runners.addAll(context.getBeansOfType(ApplicationRunner.class).values());
runners.addAll(context.getBeansOfType(CommandLineRunner.class).values());
CommandLineRunner
第一步 定义方法,
/**
* 容器启动后方法
*
* @author zhangyf
* @date 2024/3/27 16:15
*/
@Component
public class MyApplicationContextRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("测试测试,实现CommandLineRunner完成应用启动好方法。。。。。滴滴滴 ");
}
}
第二步 不要忘记注解
主类上也要加入注解 (扫描配置)
@ComponentScan(basePackages = "com.gateway.demo.customizable")
ApplicationRunner
和上面基本一样
/**
* 容器启动后方法
*
* @author zhangyf
* @date 2024/3/28 15:20
*/
@Component
public class MyApplicationContextRunnerA implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("测试测试,实现ApplicationRunner完成应用启动好方法。。。。。滴滴滴 ");
}
}
重点
ApplicationRunner和CommandLineRunner的区别我这里只说明你需要使用触发方法时的区别
主要就是参数,应该参数是String 传入的是命令行,另一个是ApplicationArguments对象
根据具体需求,如果任务与命令行参数相关,就使用
CommandLineRunner
,
如果你需要更多的参数信息或者需要执行更通用的任务,就使用ApplicationRunner
接口。在实践中,两者可以根据需求结合使用。
4、全局时间格式统一
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
* 时间格式处理
*
* @author zhangyf
* @date 2024/4/29 9:30
*/
@Configuration
public class DateTimeSerializerConfig implements WebMvcConfigurer {
@Value("${spring.jackson.date-format}")
private String pattern;
/**
* 时间处理
* 使用此方法, 以下 spring-boot: jackson时间格式化 配置 将会失效
* spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
* spring.jackson.time-zone=GMT+8
* 原因: 会覆盖 @EnableAutoConfiguration 关于 WebMvcAutoConfiguration 的配置
* */
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//防止Swagger乱码
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof StringHttpMessageConverter stringHttpMessageConverter) {
stringHttpMessageConverter.setDefaultCharset(StandardCharsets.UTF_8);
}
}
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//localDateTime格式化
JavaTimeModule module = new JavaTimeModule();
LocalDateTimeDeserializer dateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern));
LocalDateTimeSerializer dateTimeSerializer = new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
module.addDeserializer(LocalDateTime.class, dateTimeDeserializer);
module.addSerializer(LocalDateTime.class, dateTimeSerializer);
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(module)
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).build();
//date时间格式化
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setDateFormat(new SimpleDateFormat(pattern));
// 设置格式化内容
converter.setObjectMapper(objectMapper);
converters.add(0, converter);
}
}
配合JsonFormat完成部分自定义
不定时增加
参考文章
个人笔记,不同意见,望有交流
直接可以点击跳转连接
GPT3.5 感谢全网作者