我尝试使用Windows 10 命令行在控制台上打印彩色消息,但没有成功。根据Log4j 2 文档,我应该将Jansi jar 添加到我的打印应用程序中,并将属性设置log4j.skipJansi为false在 Windows 上启用 ANSI 支持。请您检查并说出我做错了什么:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LoggerTest {
private static final Logger logger = LogManager.getLogger();
public static void main(String[] args) throws Exception {
logger.info("Hello!");
}
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="log4j.skipJansi" value="false"/>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout>
<disableAnsi>false</disableAnsi>
<Pattern>%style{%d [%t] %c %p: %m}{yellow}%n%ex</Pattern>
</PatternLayout>
</Console>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="ConsoleAppender"/>
</Root>
</Loggers>
</Configuration> …Run Code Online (Sandbox Code Playgroud) 对于这个基于spring-boot-starter-data-jpa依赖和H2内存数据库的实验项目,我定义了一个User具有两个字段(id和firstName)的实体,并UsersRepository通过扩展CrudRepository接口声明了一个。
现在,考虑一个简单的控制器,它提供两个端点:/print-user读取同一用户两次,间隔打印其名字,并/update-user用于在两次读取之间更改用户的名字。请注意,我特意设置了Isolation.READ_COMMITTEDlevel 并期望在第一次事务过程中,通过相同 id 检索两次的用户将具有不同的名称。但是相反,第一笔交易打印出两次相同的值。为了更清楚,这是完整的操作序列:
jeremy的名字设置为Jeremy。/print-userwhich 打印出来Jeremy并进入睡眠状态。/update-user从另一个会话调用,它将jeremy的名字更改为Bob.jeremy用户时,Jeremy即使名字已经更改为他的名字,它也会再次打印出来Bob(如果我们打开数据库控制台,它现在确实存储为Bob,不是Jeremy)。似乎在这里设置隔离级别没有任何影响,我很好奇为什么会这样。
@RestController
@RequestMapping
public class UsersController {
private final UsersRepository usersRepository;
@Autowired
public UsersController(UsersRepository usersRepository) {
this.usersRepository = usersRepository;
}
@GetMapping("/print-user")
@ResponseStatus(HttpStatus.OK)
@Transactional (isolation = Isolation.READ_COMMITTED) …Run Code Online (Sandbox Code Playgroud) 好吧,我知道如何使用 powershell 方法 - MinimizeAll() 从批处理文件中最小化桌面上所有打开的窗口:
powershell -command "& { $x = New-Object -ComObject Shell.Application; $x.minimizeall() }"
Run Code Online (Sandbox Code Playgroud)
问题是:此方法最小化了所有内容,包括当前的 cmd 控制台,在我的情况下,该控制台应该对用户始终可见。
现在,为了解决这个问题,我使用外部nircmd.exe工具,我的 .bat 文件的这一部分如下所示:
:: change current command prompt window title
title my-cmd-console
:: minimize all open windows on the desktop with powershell command
powershell -command "& { $x = New-Object -ComObject Shell.Application; $x.minimizeall() }"
:: bring console back to the front with nircmd.exe command 'win activate [filter window by title]'
nircmd.exe win activate title "my-cmd-console"
Run Code Online (Sandbox Code Playgroud)
我不喜欢这段代码的是屏幕上有很多“闪烁”:开始时,控制台出现在桌面上,然后它与所有其他窗口一起最小化,然后再次回到桌面前面。
所以,问题是:如何使控制台出现在桌面前面并“锁定它”,以便在到达命令行 EXIT …
我运行一个小的批处理文件来重命名一些 txt 文件:
“C:\backup\t1-dd-dd t2-dd-dd.txt”
在文件名中d - 是一个数字(从 0 到 9);
注意:文件名中 t1 和 t2 标记之间有空格(我出于某种原因需要它)。
现在,我只需要替换文件名的“t1-dd-dd”部分中的数字。
使用 powershell Rename-Item 可以这样做(示例):
powershell -command "& { Get-ChildItem ?:\backup -filter 't1-* t2-*.txt' | Rename-Item -NewName { $_.Name -replace 't1-\d\d-\d\d','t1-00-99' } }"
Run Code Online (Sandbox Code Playgroud)
结果将是这样的:
C:\backup\t1-14-26 t2-56-48.txt(旧文件名)
C:\backup\t1-00-99 t2-56-48.txt(新文件名)
是否可以在没有 powershell 的情况下做同样的事情,只使用 cmd RENAME 命令?
我有一个示例代码,它创建一个表,在其中插入一些行,然后尝试取消整个事务,但是conn.rollback()似乎只对INSERT语句有效,而CREATE TABLE却不受影响:新创建的表在数据库中保持永久不变,没有插入任何行。
将JDBC驱动程序与MySQL DBMS一起使用时,这是标准行为吗?
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestBatch {
public static void main(String[] args) {
try (Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC",
"root", "root")) {
// drop table
try (Statement dropStatement = conn.createStatement()) {
dropStatement.executeUpdate("DROP TABLE IF EXISTS mytable");
}
// create table, insert rows and rollback
conn.setAutoCommit(false);
try (Statement stmt = conn.createStatement()) {
stmt.addBatch("CREATE TABLE mytable (id INT)");
stmt.addBatch("INSERT INTO mytable VALUES (1)");
stmt.addBatch("INSERT INTO mytable VALUES (2)");
stmt.executeBatch();
conn.rollback();
} …Run Code Online (Sandbox Code Playgroud) java ×3
windows ×3
cmd ×2
powershell ×2
ansi-escape ×1
batch-file ×1
console ×1
file-rename ×1
jdbc ×1
log4j ×1
mysql ×1
regex ×1
rollback ×1
spring ×1
spring-boot ×1