content: package com.konsol.beatstream;
  
  import com.konsol.beatstream.config.ApplicationProperties;
  import com.konsol.beatstream.config.CRLFLogConverter;
  import com.konsol.beatstream.config.MyEnvironmentDatabaseListener;
  import jakarta.annotation.PostConstruct;
  import java.net.InetAddress;
  import java.net.UnknownHostException;
  import java.util.Arrays;
  import java.util.Collection;
  import java.util.Optional;
  import org.apache.commons.lang3.StringUtils;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.boot.context.properties.EnableConfigurationProperties;
  import org.springframework.core.env.Environment;
  import org.springframework.scheduling.annotation.EnableAsync;
  import org.springframework.scheduling.annotation.EnableScheduling;
  import tech.jhipster.config.DefaultProfileUtil;
  import tech.jhipster.config.JHipsterConstants;
  
  @SpringBootApplication
  @EnableAsync
  @EnableScheduling
  @EnableConfigurationProperties({ ApplicationProperties.class })
  public class BeatStreamApp {
  
      private static final Logger LOG = LoggerFactory.getLogger(BeatStreamApp.class);
  
      private final Environment env;
  
      public BeatStreamApp(Environment env) {
          this.env = env;
      }
  
      /**
       * Initializes beatStream.
       * <p>
       * Spring profiles can be configured with a program argument --spring.profiles.active=your-active-profile
       * <p>
       * You can find more information on how profiles work with JHipster on <a href="https://www.jhipster.tech/profiles/">https://www.jhipster.tech/profiles/</a>.
       */
      @PostConstruct
      public void initApplication() {
          Collection<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
          if (
              activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) &&
              activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_PRODUCTION)
          ) {
              LOG.error(
                  "You have misconfigured your application! It should not run " + "with both the 'dev' and 'prod' profiles at the same time."
              );
          }
          if (
              activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) &&
              activeProfiles.contains(JHipsterConstants.SPRING_PROFILE_CLOUD)
          ) {
              LOG.error(
                  "You have misconfigured your application! It should not " + "run with both the 'dev' and 'cloud' profiles at the same time."
              );
          }
      }
  
      /**
       * Main method, used to run the application.
       *
       * @param args the command line arguments.
       */
      public static void main(String[] args) {
          SpringApplication app = new SpringApplication(BeatStreamApp.class);
  
          DefaultProfileUtil.addDefaultProfile(app);
          app.addListeners(new MyEnvironmentDatabaseListener());
          Environment env = app.run(args).getEnvironment();
          logApplicationStartup(env);
      }
  
      private static void logApplicationStartup(Environment env) {
          String protocol = Optional.ofNullable(env.getProperty("server.ssl.key-store")).map(key -> "https").orElse("http");
          String applicationName = env.getProperty("spring.application.name");
          String serverPort = env.getProperty("server.port");
          String contextPath = Optional.ofNullable(env.getProperty("server.servlet.context-path"))
              .filter(StringUtils::isNotBlank)
              .orElse("/");
          String hostAddress = "localhost";
          try {
              hostAddress = InetAddress.getLocalHost().getHostAddress();
          } catch (UnknownHostException e) {
              LOG.warn("The host name could not be determined, using `localhost` as fallback");
          }
          LOG.info(
              CRLFLogConverter.CRLF_SAFE_MARKER,
              """
  
              ----------------------------------------------------------
              \tApplication '{}' is running! Access URLs:
              \tLocal: \t\t{}://localhost:{}{}
              \tExternal: \t{}://{}:{}{}
              \tProfile(s): \t{}
              ----------------------------------------------------------""",
              applicationName,
              protocol,
              serverPort,
              contextPath,
              protocol,
              hostAddress,
              serverPort,
              contextPath,
              env.getActiveProfiles().length == 0 ? env.getDefaultProfiles() : env.getActiveProfiles()
          );
      }
  }
  