我试图在我的任何其他代码都没有执行之前,先在日志中打印我的应用程序版本,以便在发生错误时将该版本包含在日志文件中。
@SpringBootApplication
public class Application {
public static void main( String... args ) {
var ctx = SpringApplication.run( Application.class, args );
ctx.getBeanProvider( BuildProperties.class ).ifAvailable( bp -> {
LogManager.getLogger( Application.class ).info( bp.getArtifact() );
} );
}
}
但是ifAvailable
中的块没有执行,我想特别打印该版本。
注意:这是在build.gradle.kts
springBoot {
buildInfo() // generates BOOT-INF/classes/META-INF/build-info.properties
}
更新失败,没有这样的bean ...
@SpringBootApplication
public class Application {
public static void main( String... args ) {
SpringApplication.run( Application.class, args );
}
@Bean
CommandLineRunner runner( BuildProperties bp ) {
return args -> LogManager.getLogger( Application.class ).info( bp.getArtifact() );
}
}
更新2:不必在横幅后面,但必须足够早,这样它才能在来自自定义代码的任何验证/错误之前打印出来。
答案 0 :(得分:1)
假设您正在装满一个罐子(否则需要进行一些修改)
tasks.withType<BootJar>().configureEach {
enabled = true
manifest {
attributes(
"Implementation-Title" to project.description,
"Implementation-Version" to project.version
)
}
}
然后customize your banner.txt
;例如
${application.title} ${application.version}
答案 1 :(得分:0)
您可以使用具有banner.txt
属性的自定义spring.banner.location
并使用带有resource filtering的Gradle processResources
task将文件中的占位符替换为{{1 }}。
答案 2 :(得分:0)
此答案包含有关技术的一些意见, 但可能会有用。
先假设:
答案:
InfoContributor
bean的列表。我通过在组件中自动装配List
来做到这一点,如下所示:
@Autowired
私有列表infoContributorList;
这是一些代码(我的配置很差)
最终信息信息;
最终的Info.Builder infoBuilder =新的Info.Builder();
最终地图信息地图;用于(最终InfoContributor当前:infoContributorList)
{
current.contribute(infoBuilder);
}info = infoBuilder.build();
infoMap = info.getDetails();