当前位置: 首页 > 知识库问答 >
问题:

使用应用程序。@Configuration类中的属性,@Bean方法正在工作

卢永寿
2023-03-14

我在java springboot中有以下配置类定义。但是,它无法引用属性值。

@org.springframework.context.annotation.Configuration
public class HbaseConfig {

@Value("${keytab.user.name}")
private String username;

@Value("${keytab.path}")
private String keytabpath;

@Bean
public Connection getHbaseConnect() throws IOException {
    Configuration conf = HBaseConfiguration.create();
    Connection connection = ConnectionFactory.createConnection(conf); 
    UserGroupInformation.setConfiguration(conf);

    System.out.println("hbase connect..is connection closed..." + connection.isClosed());
    UserGroupInformation.loginUserFromKeytabAndReturnUGI(username, keytabpath);
    return connection;
}

@Bean
public Admin getHbaseAdmin(Connection connection) throws IOException{
    Admin admin = connection.getAdmin();
    return admin;
}

}
 keytab.user.name="username"
 keytab.path="pathtokeytab"

简单地说,我需要从HbaseConfig类的属性文件中读取上面的keytab用户名和路径。

共有3个答案

荀学文
2023-03-14

@Value注释的实际处理由BeanPostProcessor执行,因此我们不能在BeanPostProcessor类型中使用@Value。

示例:https://www.concretepage.com/spring-5/spring-value#placeholder

链接:Spring BeanPostProcessor是如何工作的?

屠泰平
2023-03-14
  1. 确保您的属性文件名应该application.properties并且位置应该在

src/main/资源/application.properties

否则,Spring将使用默认位置(类路径:application.properties)

楚丰羽
2023-03-14

你能试试下面的方法吗,

  @ConfigurationProperties(prefix = "keytab")
  public class KeyTabConfig {

        private String username;

        private String path;

        public String getUsername(){ return this.username; }
        public String getPath(){ return this.path;}
        }

Habseconfig类别如下

@Configuration
@EnableConfigurationProperties({ KeyTabConfig.class})
public class HbaseConfig {

              @Bean
              public Connection getHbaseConnect(KeyTabConfig keyTabConfig) throws IOException {
                   Configuration conf = HBaseConfiguration.create();
                   Connection connection = 
                   ConnectionFactory.createConnection(conf); 
                   UserGroupInformation.setConfiguration(conf);

                   System.out.println("hbase connect..is connection closed..." + 
                   connection.isClosed());
                   UserGroupInformation.loginUserFromKeytabAndReturnUGI(keyTabConfig.getUsername(), keyTabConfig.getPath());
                   return connection;
                 }

             @Bean
             public Admin getHbaseAdmin(Connection connection) throws IOException{
               Admin admin = connection.getAdmin();
               return admin;
              }

          }

application.properties文件为

    keytab.username=uname
    keytab.path=path
 类似资料:
  • 在我的默认SpringBoot应用程序中,它具有依赖项,调用(带有)返回以下信息 但是,我的机器上有两个驱动器,所以我想查看它们的磁盘空间详细信息。所以我添加了一个配置文件: 现在,我的健康endpoint返回以下数据 (稍后我将考虑如何抑制默认的“diskSpace”条目) 然而,由于我可能想在不同的机器上运行我的应用程序,我想配置磁盘驱动器,以便在我的文件。 还加上 配置在启动期间加载并记录到

  • 我正在将spring MVC转换为spring boot(2.0.3版本)项目。 我在spring boot中使用此功能,它可以工作: 我尝试使用Spring引导自动配置(通过)如下(删除上面的手动bean配置): 我在下面试过了,它也不起作用: 我看了他们的留档: 我将消息属性文件放在类路径中: 我尝试了很多组合,但都不起作用,为什么? 我遇到的错误: (我很确定消息代码在我的所有语言环境的属性

  • #或$对我来说无关紧要 通常在Spring中,您可以将属性注入bean,我已经成功了。但是现在我希望用户输入一个模板字符串,可以使用应用程序上下文中的所有属性进行翻译。目前我不需要访问bean属性,但将来我可能需要。以上是定义文件夹路径时最常见场景的简化变体。运行时参数(例如,一天中的时间)增加的复杂性很小,但我问的问题是一步一步地工作。 因此,我试图在JUnit的帮助下,通过玩Spring表达式

  • 我正在开发一个基于spring boot的web应用程序,希望使用log4j2作为记录器实现。 使用log4j2-spring.xml文件中定义的日志配置,一切都可以正常工作。 不起作用的地方:我想在log4j2-spring.xml文件中使用属性占位符,该占位符应该从用于配置Spring Boot的application.yml文件中定义的属性解析。

  • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

  • 我在应用程序中使用Activiti框架。Activiti通过Activiti API进行管理。 真是个问题: 我需要重新启动服务器wtih应用程序。这意味着两件事: 我需要正确暂停/停止所有活动 目前,我的应用程序已通过系统停止。退出(0) 问题: 我怎么会那样做呢?(意指以上两项) System.exit(0)会遇到什么问题? 编辑: 是的,谢谢。但我使用嵌入式Activiti。这些适用于嵌入式