导航
# 1、背景 [2021年8月5日 JavaScript获取工作日](https://minedeed.com/JavaScript/11.html "2021年8月5日 JavaScript获取工作日") 上篇文章讲到,Lucas提了个需求:初始时间为工作日,要找n天后的工作日的时间,要用JavaScript来写,周末又来了,JavaScript不满足需求了,要用Java来写。 还要写的通用一些。我脸上浮现了毫无灵魂的微笑。。。 当然,只是排除了周末,节假日不管的! 废话不多说,直接上代码吧! # 2、代码 ```java package com.mahalalel.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 获取n天后的工作日时间 * * @author Mahalalel * @createTime 2021/8/9 14:12 */ public class WorkDayUtil { /** * 日期格式 */ public static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd"); /** * 获取工作日时间 * * @param startDate 起始时间 * @param num num个工作日 * @return */ public static Date getWorkDay(Date startDate, int num) throws ParseException { Date tomorrow = null; int delay = 1; while (delay
# 1、问题 FreeMarker template error (DEBUG mode; use RETHROW in production!): Template inclusion failed (for parameter value "../common/header.ftl"): Template not found for name "../common/header.ftl". Reason given: Backing out from the root directory is not allowed. 原因:**Backing out from the root directory is not allowed.** FreeMarker没法引入配置模版文件目录的上层文件夹中的模板文件. # 2、排查 ## 2-1、ftl文件引入 错误的引用: ```ftl ``` 项目的目录结构如下: [![](https://minedeed.com/content/uploadfile/202108/cddb1628231009.png)](https://minedeed.com/content/uploadfile/202108/cddb1628231009.png) ## 2-2、后台返回 ```java @GetMapping("/login") public String login(Model model) { return "admin/system/login"; } ``` ## 2-3、ftl引用修改 ```ftl ``` # 3、启动测试后正常显示页面
# 背景 小伙伴Lucas有个需求:初始时间为工作日,要找n天后的工作日的时间 # 实现 ## 第一种 ```javascript /** * 判断下一个工作日的时间 */ function get_next_weekday(date) { var tomorrow = new Date(date.setDate(date.getDate() + 1)) return tomorrow.getDay() % 6 ? tomorrow : get_next_weekday(tomorrow) } function getWeekday(date,num){ for (let i = 1; i
# 1、时间字段设置默认值 ```java @Column(name="CREATE_TIME", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP", insertable = false, updatable = false) @Generated(GenerationTime.INSERT) private Date createTime; ``` 解释: ①、columnDefinition:设置默认值以及生成注释 ②、GenerationTime:可用选项ALWAYS、INSERT和NEVER; - 选项为NEVER,SQL执行INSERT和UPDATE时,不会获取数据库默认值 - 选项为INSERT,SQL只会在INSERT时,获取数据库默认值 - 选项为ALWAYS,表明该属性的值由数据库生成;在每次执行insert、update时执行select语句来查询获取该属性的值;此时属性也应该标识为只读(insertable、updatable) ③、insertable、updatable:设置为false,该属性就不会在insert或者update语句中出现,该属性的值就由数据库默认值设置 # 2、使用GetMapping获取数据异常解决 ## 2-1、异常如下: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.mahalalel.baseproject.entity.OperaterLog$HibernateProxy$JJMDYJDv["hibernateLazyInitializer"]) ## 2-2、原因 spring boot使用jpa查询返回实体后,返回接口时候json格式化出错; fastxml.jackson将对象转为json报错,发现有些字段为null; 在接口实现类中,使用了getOne(Long id)方法,这个方法返回的是对象的引用。 ## 2-3、解决 在实体类添加如下注解: @JsonIgnoreProperties(value = { "hibernateLazyInitializer"}) ## 2-4、测试 使用postman访问接口,返回正确数据库数据 # 3、时间设置 ## 3-1、一般创建时间只会在插入数据的时候,生成数据;更新时间只有在数据更新的时候,设置数据 创建时间字段添加注解@CreatedDate;更新时间字段添加注解@LastModifiedDate ```java @Column(name = "create_time") @CreatedDate private Date createTime; @Column(name = "update_time") @LastModifiedDate private Date updateTime; ``` ## 3-2、实体类添加监听器注解 ```java @EntityListeners(AuditingEntityListener.class) public class Entity { } ``` ## 3-3、最重要的,需要在启动类中添加启用JPA审计功能的注解 ```java @EnableJpaAuditing public class ProjectApplication { } ``` ## 3-4、经过测试,发现创建数据时,时间可以写入,但是更新时,创建时间仍然会被置为null 故使用第一种方式: ```java @Temporal(TemporalType.TIMESTAMP) @CreationTimestamp @Column(name = "create_time", updatable = false, columnDefinition = "timestamp default current_timestamp comment '创建时间'") private Date createTime; @Temporal(TemporalType.TIMESTAMP) @UpdateTimestamp @Column(name = "update_time") private Date updateTime; ``` ---未完待续
# 1、自定义了配置文件 ```properties praise.siteName = mahalalel praise.siteUrl = http://127.0.0.1 ``` # 2、配置文件配置 ```java @ConfigurationProperties(prefix = "praise", value = "site.properties") ``` # 3、启动应用 报如下错误 ```log In AnnotationAttributes for annotation [org.springframework.boot.context.properties.ConfigurationProperties] declared on class 'com.xxx.config.SiteConfig', attribute 'prefix' and its alias 'value' are declared with values of [praise] and [site.properties], but only one is permitted. ``` 错误原因在于,注解ConfigurationProperties的属性prefix和value不能同时使用 # 4、修改并验证 ```java @ConfigurationProperties(prefix = "praise") public class SiteConfig { private String siteName; private String siteUrl; // get/set方法省略 } ``` 控制器内调用 ```java @RestController @RequestMapping("/task") public class TaskController { @Autowired private SiteConfig siteConfig; @GetMapping("/hello") public String hello(){ String siteName = siteConfig.getSiteName(); return "Hello Task!!!!" + siteName; } } ``` 访问地址:http://localhost:8081/task/hello 页面显示: ``` Hello Task!!!!mahalalel ```
# 1、问题出现 项目需求,要求导出Excel带上时间,所以我就用常用的日期时间格式:yyyy-MM-dd HH:mm:ss; 但是测试过程中出现以下异常 Exception occurred during processing request: Invalid char (:) found at index (16) in sheet name '报名表2021-08-02 15:00:34' java.lang.IllegalArgumentException: Invalid char (:) found at index (16) in sheet name '报名表2021-08-02 15:00:34' # 2、问题分析 出现以上问题,是因为在导出Excel的时候,Excel的名字中带了“:”; 大家可以看到我取的Excel名称“报名表2021-08-02 15:00:34”,这样的Excel名称就会有问题 另外在桌面新建Excel时,名称不允许包含以下字符: \/:*?"| [![](https://minedeed.com/content/uploadfile/202108/20b51627952752.png)](https://minedeed.com/content/uploadfile/202108/20b51627952752.png) # 3、解决方法 修改java导出日期格式,使用“yyyy-MM-dd HH_mm_ss” SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss"); # 4、发散 通过图片我们可以知道导出Excel时,不能设置“\/:*?"|”,否则程序会报错