PostConstruct方法中的Spring Boot类强制转换异常

时间:2018-02-05 08:27:52

标签: spring spring-boot postconstruct

我正在运行带有PostConstruct方法的Spring Boot应用程序,以在应用程序初始化之前填充POJO。这是为了确保数据库在开始运行后不会被多个请求获取POJO内容。

我可以通过Hibernate查询从Oracle数据库中提取数据并将其存储在我的POJO中。当我尝试访问存储的数据时出现问题。数据集包含包含字符串和数字的对象列表。只是尝试在列表顶部打印对象的描述会引发类强制转换异常。我该如何缓解这个问题?

@Autowired
private TaskDescrBean taskBean;
@PostConstruct
public void loadDescriptions() {

TaskDataLoader taskData = new TaskDataLoader(taskBean.acquireDataSourceParams());
List<TaskDescription> taskList = tdf.getTaskDescription();
taskBean.setTaskDescriptionList(taskList);
System.out.println("Task description size: " + taskBean.getTaskDescriptionList().get(0).getTaskDescription());
}

我的POJO课程:

@Component
public class TaskDescrBean implements ApplicationContextAware {

@Resource
private Environment environment;
protected List<TaskDescription> taskDescriptionList;

public Properties acquireDataSourceParams() {

    Properties dataSource = new Properties();
    dataSource.setProperty("hibernate.connection.driver_class", environment.getProperty("spring.datasource.driver-class-name"));
    dataSource.setProperty("hibernate.connection.url", environment.getProperty("spring.datasource.url"));
    dataSource.setProperty("hibernate.connection.username", environment.getProperty("spring.datasource.username"));
    dataSource.setProperty("hibernate.connection.password", environment.getProperty("spring.datasource.password"));
    return dataSource;
}


public List<TaskDescription> getTaskDescriptionList() {
    return taskDescriptionList;
}


public void setTaskDescriptionList(List<TaskDescription> taskDescriptionList) {
    this.taskDescriptionList = taskDescriptionList;
}

public ApplicationContext getApplicationContext() {
    return applicationContext;
}


public void setApplicationContext(ApplicationContext applicationContext) {
    this.applicationContext = applicationContext;
}
}

我的DAO课程:

public class TaskDataLoader {

private Session session;
private SessionFactory sessionFactory;

public TaskDataLoader(Properties connectionProperties) {

    Configuration config = new Configuration().setProperties(connectionProperties);
    config.addAnnotatedClass(TaskDescription.class);
    sessionFactory = config.buildSessionFactory();
}

@SuppressWarnings("unchecked")
public List<TaskDescription> getTaskDescription() {

    List<TaskDescription> taskList = null;
    session = sessionFactory.openSession();
    try {

        String description = "from TaskDescription des";
        Query taskDescriptionQuery = session.createQuery(description);
        taskList = taskDescriptionQuery.list();
        System.out.println("Task description fetched. " + taskList.getClass());
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        session.close();
    }
    return taskList;
}

TaskDescription实体:

@Entity
@Table(name="TASK_DESCRIPTION")

@JsonIgnoreProperties
public class TaskDescription implements Serializable {
    private static final long serialVersionUID = 1L;

@Id
@Column(name="TASK_DESCRIPTION_ID")
private Long taskDescriptionId;

@Column(name="TASK_DESCRIPTION")
private String taskDescription;

public Long getTaskDescriptionId() {
    return taskDescriptionId;
}

public void setTaskDescriptionId(Long taskDescriptionId) {
    this.taskDescriptionId = taskDescriptionId;
}    

public String getTaskDescription() {
    return taskDescription;
}

public void setTaskDescription(String taskDescription) {
    this.taskDescription = taskDescription;
}

}

栈跟踪

1 个答案:

答案 0 :(得分:0)

我没有在return语句中发送List,而是将其转换为JSON对象并发送了它的String表示,我使用mapper.readValue()

转换后将其映射回Object