小编dma*_*hop的帖子

Log4j2 系统属性写入文件

我使用以下 log4j2 配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5.5level %-60.60logger - %msg%n" />
            <Filters>
                <ThresholdFilter level="info" onMatch="ACCEPT"
                    onMismatch="DENY" />
            </Filters>
        </Console>
        <RollingFile name="RollingFile"
            fileName="${sys:log.file}"
            filePattern="${sys:log.parent.path}\$${date:yyyy-MM}\${sys:log.file.name}-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <Pattern>
                    %d{yyy-MM-dd HH:mm:ss.SSS} [%30.30t]%-10.10level%-60.60logger - %msg%n
                </Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="60 MB" />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="trace">
            <AppenderRef ref="RollingFile" />
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

当文件位置作为命令行参数传递时,系统参数被设置,然后函数 reconfigureLog() 设置属性

public static void reconfigureLog(String logPath)
    {
        File logFile = new File(logPath);
        System.setProperty("log.file", logPath);
        System.setProperty("log.parent.path", logFile.getParent()); …
Run Code Online (Sandbox Code Playgroud)

java log4j2

5
推荐指数
1
解决办法
1万
查看次数

Java8解析给定字符串的日期或日期时间格式

我有一个文件可以具有日期修改值,具有日期或日期时间的格式.我曾经将值解析为:

String t = "2012-01-05T21:21:52.834Z";
logger.info(ZonedDateTime.parse(t).toEpochSecond() * 1000);
Run Code Online (Sandbox Code Playgroud)

现在,字符串也可以

t = "2012-01-05";
Run Code Online (Sandbox Code Playgroud)

哪个引起了错误

线程"main"中的异常java.time.format.DateTimeParseException:无法在java.time.format.DateTimeFormatter.parseResolved0(未知来源)的索引10处解析文本"2012-01-05"

如果我用这个字符串(参考)

LocalDate date = LocalDate.parse(t, DateTimeFormatter.ISO_DATE);
logger.info(date.atStartOfDay(ZoneId.of("UTC")).toEpochSecond() * 1000);
Run Code Online (Sandbox Code Playgroud)

这会奏效.但是,正如我已经提到的那样,字符串可以是这些类型中的任何一种,我如何识别格式然后相应地得到毫秒?

java date java-8 java-time

3
推荐指数
1
解决办法
1870
查看次数

Java8同时过滤和更改属性

通读这篇文章,我可以像这样过滤集合:

Set<Status> statusClone = cloner.deepClone(statusList).stream().filter(s -> !(s instanceof FileMetadata)).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

但是,我还需要设置属性同时过滤它们.过滤后,我目前遍历每个,然后设置属性:

for (Iterator<Status> iterator = statusClone.iterator(); iterator.hasNext();)
        {
            Status s = iterator.next();
//          if (s instanceof FileMetadata)
//          {
//              iterator.remove();
//              continue;
//          }
            s.setStatus(JobStatus.UNINITIATED);
            s.setLastAccessedTime(0);
            s.setOffSet(null);
            s.setStreamNo(null);
        }
        statusList.addAll(statusClone);
Run Code Online (Sandbox Code Playgroud)

如果不使用foreach,这在Java8中是否可行?

编辑:从评论,我同意我可以在过滤器内克隆.谢谢.

java lambda java-8 java-stream

2
推荐指数
1
解决办法
1565
查看次数

没有历史表的数据库版本控制

我正在阅读这篇文章以实现表的记录级版本控制。我注意到该架构涉及历史表的使用。但是,我的场景不需要回滚,而是检索时间点记录。这是我尝试使用单个表进行版本控制的设计。请注意,这是一个简单的表数据(没有约束、索引等)。我打算基于 id 建立索引,因为这涉及列上的 group by 子句。

例如,我有一个表 Test ,其中

id 是标识符,

modstamp 是数据的时间戳(绝不为空)

除了上面的列外,该表还将包含簿记列

local_modstamp 是更新记录的时间戳

del_modstamp 是删除记录的时间戳

在备份期间,所有记录均从源获取并插入到记录具有值 local_modstamp = null 和 del_stamp = null 的位置。

id |modstamp                   |local_modstamp |del_modstamp |
---|---------------------------|---------------|-------------|
1  |2016-08-01 15:35:32 +00:00 |               |             |
2  |2016-07-29 13:39:45 +00:00 |               |             |
3  |2016-07-21 10:15:09 +00:00 |               |             |
Run Code Online (Sandbox Code Playgroud)

获得记录后,处理数据的场景如下(假设参考时间[ref_time]是进程运行的时间):

  1. 正常插入。

  2. 更新:使用 local_modstamp = ref_time 更新最新记录。然后插入新记录。查询将是:更新测试集 local_modstamp = 其中 id = 且 local_modstamp 不为空且 del_modstamp 不为空 插入测试值(...)

  3. 删除:用 del_modstamp = ref_time …

database-design database-versioning

2
推荐指数
1
解决办法
2741
查看次数