在idea本地运行项目时出现以下报错:
java.lang.IllegalArgumentException: Could not resolve placeholder 'hadoop.conf.dir' in value "${hadoop.conf.dir}"
问题排查:
1、首先排查代码中@Value注解和配置文件application.properties中的是否一致:
@Value("${hadoop.conf.dir}")
private String hadoop_conf_dir;
@Value("${spark.home.dir}")
private String spark_home_dir;
@Value("${spark.driver.memory}")
private String spark_driver_memory;
@Value("${spark.executor.memory}")
private String spark_executor_memory;
@Value("${spark.executor.cores}")
private String spark_executor_cores;
@Value("${spark.executor.instances}")
private String spark_executor_instances;
@Value("${spark.default.parallelism}")
private String spark_default_parallelism;
hadoop.conf.dir=/home/bigdata/hadoop-2.6.0/etc/hadoop/ spark.home.dir=/home/bigdata/spark-2.2.0-bin-hadoop2.6/ spark.driver.memory=4g spark.executor.memory=4g spark.executor.cores=4 spark.executor.instances=5 spark.default.parallelism=20
2、我曾经在GsSparkLauncherApplication 主类配置过@PropertySource注解来指定配置文件,确认该注解也已经删除掉了,所以也不是这个的原因。
@SpringBootApplication
public class GsSparkLauncherApplication {
public static void main(String[] args) {
SpringApplication.run(GsSparkLauncherApplication.class, args);
}
}
3、根据报错信息,相关配置读取不到,应该还是和配置文件有关。进一步到target-classes中排查,发现果然没有配置文件:
4、到这里我们基本已经排查出问题所在,是什么导致了配置文件不存在呢?
突然想起在昨天的工作中(https://blog.csdn.net/weixin_44455388/article/details/121036984),在做打瘦包的时候,maven配置做了一些改动,添加了以下的内容:
src/main/resources static/ templates/ true
这就是问题所在,因此要么把该配置删除,要么添加application.properties配置文件,但是推荐添加相关配置,如下所示:
src/main/resources static/ templates/ *.properties true
有人可能要说,没有必要配置这个,把这个删了岂不是更好。其实不然。
这个配置是我在打瘦包的时候加上的,目的就是为了打包的时候把无关紧要的东西和依赖包都剔除,方便因为jar包太大带来的代码修改和项目版本更迭后,传jar包的麻烦。可能在日常开发中,resource目录下我们可能会放一些开发中用到的测试数据文件,不添加以上配置,打jar包的时候会将这些没用的东西一并打包;使用该配置的话,则可以更加精准的指定哪些可以打进jar包,哪些不可以。
如我在resource目录下创建dev目录,dev目录下存放开发需要的测试数据文件,不进行配置的话,打包后jar包里同样会有该文件:



