Springboot 打印所有配置

Springboot 打印所有配置

对接一个第三方应用做调试时,想打印出所有的配置,调试我这边做的配置是否有效,摸索了一番后找到了一个解决方案,废话不多说,直接上代码。

 

package com.marioplus;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.MutablePropertySources;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

@SpringBootApplication
public class App extends SpringBootServletInitializer implements CommandLineRunner {

    @Resource
    private ConfigurableEnvironment springEnv;

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        MutablePropertySources propSrcs = springEnv.getPropertySources();
        // 获取所有配置
        Map<String, String> props = StreamSupport.stream(propSrcs.spliterator(), false)
                .filter(ps -> ps instanceof EnumerablePropertySource)
                .map(ps -> ((EnumerablePropertySource) ps).getPropertyNames())
                .flatMap(Arrays::stream)
                .distinct()
                .collect(Collectors.toMap(Function.identity(), springEnv::getProperty));
        
        // key 和 value 之间的最小间隙
        int interval = 20;
        int max = props.keySet().stream()
                .max(Comparator.comparingInt(String::length))
                .orElse("")
                .length();
        
        // 打印
        props.keySet().stream()
                .sorted()
                .forEach(k -> {
                    int i = max - k.length() + interval;
                    String join = String.join("", Collections.nCopies(i, " "));
                    System.out.println(String.format("%s%s%s", k, join, props.get(k)));
                });
    }
}

 

欢迎关注我的公众号,和我一起,每天进步一点点



作者:marioplus12
链接:https://www.jianshu.com/p/3b3f08a6ee30

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Spring Boot中,可以通过配置文件或者代码的方式来打印SQL语句。以下是两种常见的方法: 1. 配置文件方式 在application.properties或者application.yml文件中添加如下配置: ```properties # 打印 sql spring.jpa.show-sql=true # 格式化 sql spring.jpa.properties.hibernate.format_sql=true ``` 2. 代码方式 在Spring Boot启动类中配置如下: ```java import org.hibernate.jpa.HibernatePersistenceProvider; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Autowired private DataSource dataSource; @Autowired private EntityManagerFactory entityManagerFactory; @PostConstruct public void init() { org.hibernate.jpa.HibernateEntityManagerFactory hibernateEntityManagerFactory = (org.hibernate.jpa.HibernateEntityManagerFactory) entityManagerFactory; hibernateEntityManagerFactory.getSessionFactory().getStatistics().setStatisticsEnabled(true); } @Bean public HibernatePersistenceProvider hibernatePersistenceProvider() { return new HibernatePersistenceProvider(); } @Bean public HibernateJpaSessionFactoryBean sessionFactory() { HibernateJpaSessionFactoryBean sessionFactory = new HibernateJpaSessionFactoryBean(); sessionFactory.setDataSource(dataSource); return sessionFactory; } } ``` 以上代码使用了org.hibernate.jpa.HibernateEntityManagerFactory来打开SQL日志记录。但是请注意,这种方式只适用于Hibernate作为JPA实现的情况。如果使用其他的JPA实现,可能需要使用不同的配置方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java知路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值