Как я могу напечатать версию приложения в начале журнала в Spring Boot? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь напечатать версию своих приложений на ранних этапах журнала, прежде чем любой другой код сможет выполнить, поэтому в случае ошибки версия включается в файл журнала.

@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
}

обновление завершается неудачно без такого компонента ...

@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: не обязательно должно быть после баннера, но должно быть достаточно рано, чтобы оно печаталось до любой проверки / ошибок из пользовательского кода.

Ответы [ 3 ]

0 голосов
/ 08 января 2019

при условии, что вы упаковываете флягу (в противном случае необходимы некоторые модификации)

tasks.withType<BootJar>().configureEach {
    enabled = true
    manifest {
        attributes(
            "Implementation-Title" to project.description,
            "Implementation-Version" to project.version
        )
    }
}

затем настроить banner.txt; например,

${application.title} ${application.version}
0 голосов
/ 08 января 2019

Этот ответ содержит что-то вроде техники, но может быть полезным.

Сначала предположения:

  1. Вы создаете исполняемый, толстый Jar.
  2. Вы используете плагин spring-boot-maven-plugin для сборки баночки.

Ответ:

  1. Настройте плагин spring-boot-maven-plugin для включения информации о сборке в артефакт. Инструкции см. В разделе 91.1 «Генерация информации о сборке» (в справочнике по загрузке пружины).
  2. Обязательно включите вкладчик информации о сборке. Это должно быть включено по умолчанию (поиск ссылки на загрузочную пружину для "management.info.build.enabled", чтобы найти свойство, которое включает его автора информации.
  3. Получить список InfoContributor bean-компонентов из контекста приложения. Я делаю это, автоматически подключая List в компоненте следующим образом:

    @ Autowired
    приватный список infoContributorList;

  4. Запустите список объектов InfoContributor (в вашем случае должен быть только один, информация о сборке) и отобразите информацию.

Вот код (плохо сконфигурированный с моей стороны)

окончательная информация Info;
окончательный Info.Builder infoBuilder = новый Info.Builder ();
окончательная информация о карте;

для (окончательный текущий InfoContributor: infoContributorList)
{
current.contribute (infoBuilder); * * тысяча сорок-шесть }

info = infoBuilder.build ();

infoMap = info.getDetails ();

0 голосов
/ 08 января 2019

Вы можете настроить пользовательское banner.txt со свойством spring.banner.location и использовать фильтрацию ресурсов Gradle с помощью processResources task , чтобы заменить заполнители в этом файле теми же свойствами, которые использовались build-info.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...